X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=yarrg%2Fweb%2Froutetrade;h=0da1fd80a81929454605e46df2064d56d26d3083;hb=555b3391b3cd9967a29b219fff242b583137d2b8;hp=397e3854372787170afe7e1861de55150aa6495a;hpb=202510fa47a7459760d6e41f6017500696e344d8;p=ypp-sc-tools.db-live.git diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index 397e385..0da1fd8 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -264,6 +264,8 @@ foreach my $v (qw(MaxMass MaxVolume)) { <%perl> +my @total_massvol; + if (!@flows) { print 'No profitable trading opportunities were found.'; return; @@ -442,7 +444,7 @@ foreach my $ci (0..($#islandids-1)) { foreach my $mv (qw(mass volume)) { my $max_vn= "max_$mv"; my $max= $mv eq 'mass' ? $max_mass : $max_volume; - next unless defined $max; + $max= 1e9 unless defined $max; #print " DEFINED MAX $mv $max "; $cplex .= " ". sprintf("%-10s","${mv}_$ci:")." ". @@ -483,31 +485,54 @@ if ($qa->{'debug'}) { print "
\n" if $qa->{'debug'}; my $found_section= 0; my $glpsol_out= ''; + my $continuation=''; 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; + if (m/^\s*No\.\s+(Row|Column) name\s+(?:St\s+)?Activity\s/) { + die "$_ $found_section ?" if $found_section>0; $found_section= 1; next; } next unless $found_section==1; - next if m/^[- ]+$/; - if (!/\S/) { - $found_section= 2; - next; + if (!length $continuation) { + next if !$continuation && m/^[- ]+$/; + if (!/\S/) { + $found_section= 0; + next; + } + if (m/^ \s* \d+ \s+ \w+ $/x) { + $continuation= $&; + next; + } + } + $_= $continuation.$_; + $continuation= ''; + my ($varname, $qty) = m/^ + \s* \d+ \s+ + (\w+) \s+ (?: [A-Z*]+ \s+ )? + ([0-9.]+) \s + /x or die "$_ ?"; + if ($varname =~ m/^f(\d+)$/) { + my ($ix) = $1; + my $flow= $flows[$ix] or die; + $flow->{OptQty}= $qty; + $flow->{OptProfit}= $flow->{'unitprofit'} * $qty; + $flow->{OptCapital}= $flow->{OptQty} * + $flow->{'org_price'}; + } elsif ($varname =~ m/^(mass|volume)_(\d+)$/) { + my ($mv,$ix) = ($1,$2); + $total_massvol[$ix]{$mv}= $qty; } - my ($ix, $qty) = - m/^\s*\d+\s+f(\d+)\s+\S+\s+(\d+)\s/ or die "$_ ?"; - my $flow= $flows[$ix] or die; - $flow->{OptQty}= $qty; - $flow->{OptProfit}= $flow->{'unitprofit'} * $qty; - $flow->{OptCapital}= $flow->{OptQty} * $flow->{'org_price'}; } print "\n" if $qa->{'debug'}; my $prerr= "\n=====\n$cplex\n=====\n$glpsol_out\n=====\n "; pipethrough_run_finish($output,$prerr); - die $prerr unless $found_section; + map { defined $_->{OptQty} or die "$prerr $_->{Ix}" } @flows; +# map { defined +# die $prerr if grep { ! } @flows; +# map { die +# die $prerr if map { }; $addcols->({ DoReverse => 1, Special => sub { @@ -696,17 +721,40 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( } } - my $total; + my ($total, $total_to_show); my $dline= 0; - my $show_flows= sub { - my ($od,$arbitrage,$collectdeliver) = @_; + my $show_total= sub { + my ($totaldesc, $sign) = @_; + if (defined $total) { + die if defined $total_to_show; + $total_total += $sign * $total; + $total_to_show= [ $totaldesc, $total ]; + $total= undef; + } + $dline= 0; + }; + my $show_total_now= sub { + my ($xinfo) = @_; + return unless defined $total_to_show; + my ($totaldesc,$totalwas) = @$total_to_show; %perl> -% +