#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;
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);
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;
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
s++, delay_slot_loss_factor *= LOSS_FACTOR_PER_DELAY_SLOT) {
int si= islands[s];
- for (d=s; d<nislands; d++) {
+ for (d= s + exclude_arbitrage;
+ d < nislands;
+ d++) {
int di= islands[d];
int already_d;
for (already_d=s+1; already_d<d; already_d++)