From 85fced6311966d8533ce8186f4f98ff8b6303619 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 9 Oct 2009 22:29:49 +0100 Subject: [PATCH] routesearch: allow constraining destination island --- yarrg/rscommon.h | 9 ++++++--- yarrg/rsmain.c | 15 +++++++++++++-- yarrg/rssearch.c | 18 +++++++++++++++++- yarrg/x.gdb | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/yarrg/rscommon.h b/yarrg/rscommon.h index 0933e0f..0a6f306 100644 --- a/yarrg/rscommon.h +++ b/yarrg/rscommon.h @@ -25,11 +25,13 @@ CTR(ipairs_relevant) \ CTR(quantities_loaded) \ CTR(routes_considered) \ + CTR(routes_wrongfinalelim) \ CTR(routes_quickelim) \ CTR(routes_stratelim) \ CTR(routes_valued) \ + CTR(routes_wrongfinal) \ CTR(newbests_strat_absolute) \ - CTR(newbests_strat_perleague) \ + CTR(newbests_strat_perleague) \ CTR(subroute_tails_valued) \ CTR(subroutes_valued) \ CTR(subroutes_nonempty) @@ -112,8 +114,9 @@ typedef struct { } PotentialResult; void setup_search(void); -void search(int start_isle, PotentialResult ****strat_base_io - /* strat_base[finalarch][midarch]-> */); +void search(int start_isle, int final_isle /* -1 means any */, + PotentialResult ****strat_base_io + /* strat_base[finalarch][midarch]-> */); extern double max_mass, max_volu, max_capi; extern double distance_loss_factor_per_league; diff --git a/yarrg/rsmain.c b/yarrg/rsmain.c index 9283fbc..c76e7da 100644 --- a/yarrg/rsmain.c +++ b/yarrg/rsmain.c @@ -2,6 +2,8 @@ #include "rscommon.h" +#include + int o_quiet= 0; double max_mass=-1, max_volu=-1, max_capi=-1; double distance_loss_factor_per_league; @@ -63,19 +65,28 @@ int main(int argc, const char **argv) { max_dist= atoi(*argv++); nhighscores_absolute= atoi(*argv++); nhighscores_perleague= atoi(*argv++); + const char *final_isle_spec= *argv++; MCALLOC(highscores_absolute, nhighscores_absolute); MCALLOC(highscores_perleague, nhighscores_perleague); int resultsix= 0; while ((arg= argv[resultsix])) { - search(atoi(arg), &results[resultsix]); + int init_isle= atoi(arg); + + int final_isle; + if (!strcmp(final_isle_spec,"circ")) final_isle= init_isle; + else if (!strcmp(final_isle_spec,"any")) final_isle= -1; + else final_isle= atoi(final_isle_spec); + assert(final_isle); + + search(init_isle, final_isle, &results[resultsix]); resultsix++; } int i, midarch, finarch; for (i=0; iislandid etc. */ static sqlite3_stmt *ss_neigh; static int ports[MAX_ROUTELEN]; +static int final_isle; static Neighbour *get_neighbours(int isle) { Neighbour **np= &neighbours[isle]; @@ -47,6 +48,8 @@ static double process_route(int nports, int totaldist, ctr_routes_considered++; + int wrong_final= final_isle && ports[nports-1] != final_isle; + debugf("========== ROUTE"); for (i=0; iabsolute && perleague <= strat->perleague) return absolute; @@ -167,8 +181,10 @@ static void recurse(int last_isle, } } -void search(int start_isle, PotentialResult ****strat_base_io) { +void search(int start_isle, int final_isle_spec, + PotentialResult ****strat_base_io) { strat_base= ONDEMAND(*strat_base_io, narches); + final_isle= final_isle_spec <= 0 ? 0 : final_isle_spec; recurse(start_isle,0,0,1e6); } diff --git a/yarrg/x.gdb b/yarrg/x.gdb index e83ccaf..37eff38 100644 --- a/yarrg/x.gdb +++ b/yarrg/x.gdb @@ -1,5 +1,5 @@ file ./routesearch -set args -DN 13460 20210 -1 0.0005 search 30 20 20 4 19 134 32 13 24 36 +set args -DN 13460 20210 -1 0.0005 search 30 20 20 36 4 19 134 32 13 24 36 break setup_search run finish -- 2.30.2