X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=yarrg%2Frsvalue.c;h=eb4d3f053480f82ef5b04ab710488054d1568c2c;hp=b4e23227d2b42ca598612ac21cb8248150cee9a4;hb=fe2cd54600f099689170bc2d9c47a48559c1d692;hpb=24f73490c5cff2cbe09a575b0929ac181c36704a diff --git a/yarrg/rsvalue.c b/yarrg/rsvalue.c index b4e2322..eb4d3f0 100644 --- a/yarrg/rsvalue.c +++ b/yarrg/rsvalue.c @@ -21,18 +21,12 @@ typedef struct { #define TRADES_PER_BLOCK 10 -typedef struct TradesBlock{ +typedef struct TradesBlock { struct TradesBlock *next; Trade t[TRADES_PER_BLOCK]; } TradesBlock; -typedef struct { - double distance_loss_factor; - int ntrades; - TradesBlock *trades; -} IslandPair; - -IslandPair ***ipairs; /* ipairs[sislandid][dislandid] */ +static IslandPair ***ipairs; /* ipairs[sislandid][dislandid] */ typedef struct IslandTradeEnd { struct IslandTradeEnd *next; @@ -136,7 +130,7 @@ static void add_leg_c(int startrow, int leg, double value) { add_constraint(startrow+leg, value); } -static IslandPair *ipair_get(int si, int di) { +IslandPair *ipair_get(int si, int di) { IslandPair *ip, **ipa; assert(si < islandtablesz); @@ -151,6 +145,7 @@ static IslandPair *ipair_get(int si, int di) { ipa[di]= ip= mmalloc(sizeof(*ip)); ip->ntrades= 0; ip->trades= 0; + ip->route_tail_value= -1; int inblock= TRADES_PER_BLOCK; TradesBlock *block=0, **tail=&ip->trades; @@ -187,7 +182,7 @@ static IslandPair *ipair_get(int si, int di) { return ip; } -double value_route(int nislands, const int *islands) { +double value_route(int nislands, const int *islands, int exclude_arbitrage) { int s,d; /* We need to construct the LP problem. GLPK talks @@ -244,7 +239,9 @@ double value_route(int nislands, const int *islands) { s++, delay_slot_loss_factor *= LOSS_FACTOR_PER_DELAY_SLOT) { int si= islands[s]; - for (d=s; d