X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Fweb%2Froutetrade;h=9fde77e7aa6783104b92fd80d636a0c0c45a970d;hb=34203ee3033aeaa10eff8848ad869f5eeb1c789a;hp=b394a3527843e0cdeddd0ca7e7d1376506a45f3b;hpb=0191640f64abf2adf416dbd2fcc6632ff58e8e8f;p=ypp-sc-tools.main.git diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index b394a35..9fde77e 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -239,6 +239,12 @@ $addcols->({ DoReverse => 1 }, % } <%perl> + +if (!@flows) { + print 'No profitable trading opportunities were found.'; + return; +} + foreach my $f (@flows) { $f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'} @@ -340,7 +346,7 @@ Route contains archipelago(es), not just specific islands. Route is complex - it visits the same island several times and isn't a simple loop. % } -Therefore, optimal trade pattern not calculated. +Therefore, optimal voyage trade plan not calculated. % } else { # ========== OPTMISATION ========== <%perl> @@ -410,7 +416,9 @@ if ($qa->{'debug'}) { qw(glpsol --cpxlp /dev/stdin -o /dev/stdout)); print "
\n" if $qa->{'debug'};
 	my $found_section= 0;
+	my $glpsol_out= '';
 	while (<$output>) {
+		$glpsol_out.= $_;
 		print encode_entities($_) if $qa->{'debug'};
 		if (m/^\s*No\.\s+Column name\s+St\s+Activity\s/) {
 			die if $found_section>0;
@@ -431,8 +439,9 @@ if ($qa->{'debug'}) {
 		$flow->{OptCapital}= $flow->{OptQty} * $flow->{'org_price'};
 	}
 	print "
\n" if $qa->{'debug'}; - pipethrough_run_finish($output, 'glpsol'); - die unless $found_section; + my $prerr= "\n=====\n$cplex\n=====\n$glpsol_out\n=====\n "; + pipethrough_run_finish($output,$prerr); + die $prerr unless $found_section; }; $addcols->({ DoReverse => 1 }, qw( @@ -548,6 +557,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( % my $iquery= $dbh->prepare('SELECT islandname FROM islands % WHERE islandid = ?'); % my %da_ages; +% my $total_total= 0; %

Voyage trading plan

@@ -644,25 +654,32 @@ Sail to <% $islandname |h %> % } % }; % my $show_total= sub { -% my ($totaldesc)= @_; +% my ($totaldesc, $sign)= @_; % if (defined $total) { +
<% $totaldesc %> <% $total |h %> total +% $total_total += $sign * $total; % } % $total= undef; % $dline= 0; <%perl> }; - $show_flows->('dst',0,'Deliver'); $show_total->('Proceeds'); - $show_flows->('org',1,'Collect'); $show_total->('(Arbitrage) outlay'); - $show_flows->('dst',1,'Deliver'); $show_total->('(Arbitrage) proceeds'); - $show_flows->('org',0,'Collect'); $show_total->('Outlay'); + $show_flows->('dst',0,'Deliver'); $show_total->('Proceeds',1); + $show_flows->('org',1,'Collect'); $show_total->('(Arbitrage) outlay',-1); + $show_flows->('dst',1,'Deliver'); $show_total->('(Arbitrage) proceeds',1); + $show_flows->('org',0,'Collect'); $show_total->('Outlay',-1); } +
+Overall net cash flow +<% + $total_total < 0 ? -$total_total." loss" : $total_total." gain" + %>
<& query_age:dataages, id2age => \%da_ages &> %