-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.cpp
executable file
·116 lines (84 loc) · 3.12 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/***************************************************************************
* Copyright (C) 2015 Tian-Li Yu and Shih-Huan Hsu *
* tianliyu@ntu.edu.tw *
***************************************************************************/
#include <math.h>
#include <iostream>
#include <cstdlib>
#include "statistics.h"
#include "dsmga2.h"
#include "global.h"
#include "chromosome.h"
using namespace std;
int
main (int argc, char *argv[]) {
if (argc != 9) {
printf ("DSMGA2 ell nInitial function maxGen maxFe repeat display rand_seed\n");
printf ("function: \n");
printf (" ONEMAX: 0\n");
printf (" MK : 1\n");
printf (" FTRAP : 2\n");
printf (" CYC : 3\n");
printf (" NK : 4\n");
printf (" SPIN : 5\n");
printf (" SAT : 6\n");
return -1;
}
int ell = atoi (argv[1]); // problem size
int nInitial = atoi (argv[2]); // initial population size
int fffff = atoi (argv[3]); // function
int maxGen = atoi (argv[4]); // max generation
int maxFe = atoi (argv[5]); // max fe
int repeat = atoi (argv[6]); // how many time to repeat
int display = atoi (argv[7]); // display each generation or not
int rand_seed = atoi (argv[8]); // rand seed
if (fffff == 4) {
char filename[200];
//sprintf(filename, "./NK_Instance/pnk%d_%d_%d_%d", ell, 4, 1, 1);
sprintf(filename, "./NK_Instance/pnk%d_%d_%d_%d", ell, 4, 5, 1);
if (SHOW_BISECTION) printf("Loading: %s\n", filename);
FILE *fp = fopen(filename, "r");
loadNKWAProblem(fp, &nkwa);
fclose(fp);
}
if (fffff == 5) {
char filename[200];
sprintf(filename, "./SPIN/%d/%d_%d",ell, ell, 1);
if (SHOW_BISECTION) printf("Loading: %s\n", filename);
loadSPIN(filename, &mySpinGlassParams);
}
if (fffff == 6) {
char filename[200];
sprintf(filename, "./SAT/uf%d/uf%d-0%d.cnf", ell, ell, 1);
if (SHOW_BISECTION) printf("Loading: %s\n", filename);
loadSAT(filename, &mySAT);
}
if (rand_seed != -1) // time
myRand.seed((unsigned long)rand_seed);
int i;
Statistics stGen, stFE, stLSFE;
int usedGen;
int failNum = 0;
for (i = 0; i < repeat; i++) {
DSMGA2 ga (ell, nInitial, maxGen, maxFe, fffff);
if (display == 1)
usedGen = ga.doIt (true);
else
usedGen = ga.doIt (false);
if (!ga.foundOptima()) {
failNum++;
printf ("-");
} else {
stFE.record (Chromosome::hitnfe);
stLSFE.record (Chromosome::lsnfe);
stGen.record (usedGen);
printf ("+");
}
fflush (NULL);
}
cout << endl;
printf ("\n");
printf ("%f %f %f %d\n", stGen.getMean (), stFE.getMean(), stLSFE.getMean(), failNum);
if (fffff == 4) freeNKWAProblem(&nkwa);
return EXIT_SUCCESS;
}