그래서 reverse tournament에 Num_Pop/2까지로 해서 95%로 돌려봤다.
population 다양성은 유지되면서 결과값은 더 좋게 나왔다. 800 조금 밑.
99%로 해봤다.
800조금 위
Num_Ipop*2로 하고 90% 해봤다.
별로
따로 define하고 200으로 해봤다. ipop=50, pop=1000
그림은 좋지만 값은 850넘는다.
mutation alarm(60초) 후에는 200에서 100으로 줄여봤다. 각이 더 꺾어진다. 좋아짐. 836
30초 60초 90초에 mutation rate과 victim max를 변경했다.
별 소용 없는 듯..
미리 팍 꺾어줘야 할 듯.
rate 4단계로 하고 max변경 안했다. 30초때 변경이 효과 있는 듯.
rate 6단계 max 변경 rate 변경
그럼 이제 처음에 mutate은 소 elitism은 대 에서 시작하여 mutate 올리고 elitism 내리는쪽으로 하자
mutate은 작은 걸로 시작해 +0.2까지 올라가고
선택 파라미터는 1에 가까운 데서 시작해 10% 내려가도록
첫번째 바꿀 때 많이 내려간 걸 볼 수 있다. 그 다음부턴 별로다. 결과도 별로
#define REVERSE_TOURNAMENT_PRESSURE 0.95
#define REV_TOR_STEP (-(0.06/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_MAX_VICTIM 100
#define REVERSE_TOURNAMENT_VICTIM_STEP (-20)
#define TOURNAMENT_PRESSURE 0.85
#define TOR_STEP (-(0.1/RATE_CONTROL_CNT))
#define RATE_CONTROL_CNT 6
#define TIMED_MUTATION_RATE
#define TOURNAMENT_PRESSURE_CONTROL
#define TOURNAMENT_VICTIM_CONTROL
#define MUTATION_CONTROL_STEP (0.2/RATE_CONTROL_CNT)
그래서 약간 파라미터 수정했다. 결과는 약 810으로 40쯤 좋아짐
#define REVERSE_TOURNAMENT_PRESSURE 0.94
#define REV_TOR_STEP (-(0.06/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_MAX_VICTIM 120
#define REVERSE_TOURNAMENT_VICTIM_STEP (-20)
#define TOURNAMENT_PRESSURE 0.83
#define TOR_STEP (-(0.1/RATE_CONTROL_CNT))
이제 반대방향 해보자 끝값이 아까의 시작값과 비슷한 수치로 했다.
결과는 816 비슷하다.
보다시피 처음에 떨어지는 각도가 예리하다. 후반에는 경사가 완만해진다.
802 가 나옴.
#define TOURNAMENT_PRESSURE 0.98
#define TOR_STEP (-(0.1/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_PRESSURE 0.88
#define REV_TOR_STEP (-(0.09/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_MAX_VICTIM 50+15*RATE_CONTROL_CNT
#define REVERSE_TOURNAMENT_VICTIM_STEP (-15)
#define RATE_CONTROL_CNT 9
#define TIMED_MUTATION_RATE
#define TOURNAMENT_PRESSURE_CONTROL
#define TOURNAMENT_VICTIM_CONTROL
#define MUTATION_CONTROL_STEP (+0.1/RATE_CONTROL_CNT)
다시 worst부터 없애는 걸로
확률적으로 60%씩으로 아래서 쭉 훑어도 별 차이 안보임
랜덤으로 선택해도 별..
(중간에 끊어서 각이 낮아보임 steep한 것) 830대 나옴.
815
#define VICTIM_MIXED // parent + worst
#define TOURNAMENT_PRESSURE 0.98
#define TOR_STEP (-(0.1/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_PRESSURE 0.88
#define REV_TOR_STEP (-(0.09/RATE_CONTROL_CNT))
//#define REVERSE_TOURNAMENT_MAX_VICTIM 50+15*RATE_CONTROL_CNT
#define REVERSE_TOURNAMENT_MAX_VICTIM 400
#define MUTATION_RATE_CONTROL
#define RATE_CONTROL_CNT 9
#define TIMED_MUTATION_RATE
#define TOURNAMENT_PRESSURE_CONTROL
//#define TOURNAMENT_VICTIM_CONTROL
#define MUTATION_CONTROL_STEP (+0.1/RATE_CONTROL_CNT)
#define MUTATION_SWAP_CYCLE
같은 걸 30도시에서 해봄
best는 아님
20 11 13 19 17 8 18 7 23 3 0 29 24 22 28 2 27 25 1 12 21 10 9 6 16 26 4 5 14 15
결국 이쪽으로 가려고 한다
30에서 best가 나오는거 봤음.
#define DEFAULT_POPULATION 1000
//#define DEFAULT_GENERATION 5000
#define DEFAULT_GENERATION -1 // unlimited
#define DEFAULT_NEW_POP 100 // new population on each generation
#define SELECTION_TOURNAMENT /// tournament method
#define TOURNAMENT_PRESSURE 0.85
#define TOR_STEP (-(0.05/RATE_CONTROL_CNT))
#define TOURNAMENT_STAGE 2 // 1, 2. not implemented others
#define VICTIM_REVERSE_TOURNAMENT
#define REVERSE_TOURNAMENT_PRESSURE 0.95
#define REV_TOR_STEP (-(0.09/RATE_CONTROL_CNT))
#define REVERSE_TOURNAMENT_MAX_VICTIM 500
#define REVERSE_TOURNAMENT_VICTIM_STEP (-15)
#define CX_MIX
#define MUTATION_RATE_CONTROL
#define RATE_CONTROL_CNT 9
#define TIMED_MUTATION_RATE
#define TOURNAMENT_PRESSURE_CONTROL
//#define TOURNAMENT_VICTIM_CONTROL
#define MUTATION_CONTROL_STEP (+0.1/RATE_CONTROL_CNT)
#define MUTATION_SWAP_CYCLE
100에서는?? 좀 다르게 해야할지도 모름.
일단 숙제 제출용으로는 프로파일 옵션 빼야하고 길이와 경로 프린트 시키고..
pollock에선 조금 다르게 세팅해서 테스트 pressure를 0.85, 0.93 로 하고 있음.