8 double max_mass=-1, max_volu=-1, max_capi=-1;
9 double distance_loss_factor_per_league;
15 DEBUG_DEFINE_SOME_DEBUGF(tableau,tabdebugf);
18 #define CTR(x) int ctr_##x;
22 static PotentialResult ****results;
23 /* results[start_isle_ix][finalisle][midisle]-> */
25 static pid_t debugoutpid;
27 int main(int argc, const char **argv) {
32 debug_flags= ~( dbg_sql2 );
37 if (arg[0] != '-') break;
39 if (!strcmp(arg,"-DN")) {
49 /* glpk insists on writing stuff to stdout, and it does buffering,
50 * so we route all our debug through it this too */
52 sysassert( (realstdout= dup(1)) > 2 );
53 sysassert( output= fdopen(realstdout,"w") );
56 sysassert(! pipe(pfd) );
57 sysassert( (debugoutpid= fork()) >=0 );
59 sysassert( dup2(pfd[0],0)==0 );
60 sysassert( dup2(2,1)==1 );
61 sysassert(! close(pfd[0]) );
62 sysassert(! close(pfd[1]) );
63 sysassert(! execlp("cat","cat",(char*)0) );
65 sysassert( dup2(pfd[1],1)==1 );
66 sysassert(! close(pfd[0]) );
67 sysassert(! close(pfd[1]) );
75 sysassert( !setvbuf(debug,0,_IOLBF,0) );
77 max_mass= atof(*argv++);
78 max_volu= atof(*argv++);
79 max_capi= atof(*argv++);
80 double loss_per_league= atof(*argv++);
82 if (!loss_per_league) loss_per_league= 1e-7;
83 distance_loss_factor_per_league= 1.0 - loss_per_league;
89 for (i=0; i<narches; i++)
90 fprintf(output,"arch %d %s\n",i,archnames[i]);
91 fprintf(output,"setup complete, starting search\n");
94 if (!strcmp(arg,"specific")) {
96 while ((arg= *argv++))
99 double val= value_route(ni, ia, 0);
100 fprintf(output, "route value is %g\n", val);
101 } else if (!strcmp(arg,"search")) {
102 MCALLOC(results, argc);
104 max_dist= atoi(*argv++);
105 nhighscores_absolute= atoi(*argv++);
106 nhighscores_perleague= atoi(*argv++);
107 const char *final_isle_spec= *argv++;
109 MCALLOC(highscores_absolute, nhighscores_absolute);
110 MCALLOC(highscores_perleague, nhighscores_perleague);
113 while ((arg= argv[resultsix])) {
114 int init_isle= atoi(arg);
117 if (!strcmp(final_isle_spec,"circ")) final_isle= init_isle;
118 else if (!strcmp(final_isle_spec,"any")) final_isle= -1;
119 else final_isle= atoi(final_isle_spec);
122 search(init_isle, final_isle, &results[resultsix]);
126 int midarch, finarch;
127 for (i=0; i<resultsix; i++) {
128 tabdebugf("============== start #%d %s [PARTIAL] ==============\n",
130 PotentialResult ***strat_resultsix= results[i];
131 if (!strat_resultsix) continue;
133 for (midarch=0; midarch<narches; midarch++) {
134 tabdebugf("| mid %d ",midarch);
137 for (finarch=0; finarch<narches; finarch++) {
138 PotentialResult **strat_finarch= strat_resultsix[finarch];
139 if (!strat_finarch) continue;
140 tabdebugf("f%d",finarch);
141 for (midarch=0; midarch<narches; midarch++) {
142 PotentialResult *result= strat_finarch[midarch];
146 tabdebugf("|%5d",(int)(result->absolute));
148 tabdebugf("%4d",(int)(result->perleague));
156 #define OUT(absperl) \
157 fprintf(output,"\n================== " #absperl " ==================\n"); \
158 for (pos=0; pos<nhighscores_##absperl; pos++) { \
159 HighScoreEntry *hs= &highscores_##absperl[pos]; \
160 PotentialResult *pr= hs->pr; \
162 const int *const ports= pr->absperl##_ports; \
164 for (nports=0; nports<MAX_ROUTELEN && ports[nports]>=0; nports++); \
165 int finisle= ports[nports-1]; int finarch= isle2arch(finisle); \
166 int midarch= route2midarch(ports,nports); \
168 " @%2d #%2d | start%3d mid%d f%d:%3d | %5d %5d %4d |", \
169 pos, nhighscores_##absperl - 1 - pos, \
170 ports[0], midarch, finarch,finisle, \
171 (int)hs->value, (int)pr->absolute, (int)pr->perleague); \
172 for (i=0; i<nports; i++) fprintf(output," %d",ports[i]); \
173 fprintf(output,"\n"); \
177 fprintf(output,"\n");
183 #define CTR(x) fprintf(output," %-30s %10d\n",#x,ctr_##x);
188 sysassert(! fclose(debug) );
189 waitpid_check_exitstatus(debugoutpid,"debug cat",1);
191 sysassert(! fclose(output) );