fraction 1/<em>divisor</em>, eg 1/2000 is the same as 0.05%; in each
case it is taken as the loss for each league of the voyage.
+<h3><a name="poelimit">Caution about stalls' poe reserves</a></h3>
+
+If you select <b>Also be cautious about stalls' poe reserves</b>,
+YARRG will calculate a minimum amount of poe that each stall has on
+hand (by looking at all the offers that stall is making), and never
+plan for you to sell goods at that stall for more than the available
+poe.
+
+<p>
+
+Goods planned to be bought at the stall (which might boost the stall's
+poe reserves) are not considered, to avoid having to calculate the
+stall's cash reserves at various different times.
+
<h3><a name="capital">Available capital</a></h3>
If you don't specify the amount of capital you have available to
Before => '',
Values => [ [ 0, 'Show total quantity at each price' ],
[ 1, 'Show individual stalls' ],
+ [ 2, "Also be cautious about stalls'".
+ " poe reserves",
+ '<a href="docs#poelimit">[?]</a>' ]
],
QuerySpecific => 1,
}, { Name => 'RouteSearchType',
my $cvalix= 0;
foreach my $valr (@{ $var->{Values} }) {
print $delim; $delim= "\n|\n";
- my ($value,$html) = @$valr;
+ my ($value,$html,$finally) = @$valr;
my $iscurrent= &{$var->{CmpCanon}}($value) eq $canon;
my $after;
if ($iscurrent) {
} else {
my %qf= (%baseqf,%queryqf);
delete $qf{$lname};
+ delete $qf{$_} foreach grep { m/^[A-Z]/ } keys %qf;
$qf{$lname}= $value if $cvalix;
</%perl>
<a href="<% $quri->(%qf) |h %>">
$after= '</a>';
}
print $html, $after;
+ print " ", $finally if defined $finally;
$cvalix++;
}
print "<p>\n\n";
totalprofit:
";
+my %stall_poe_limits;
+
foreach my $sf (@subflows) {
my $eup= $sf->{Flow}{ExpectedUnitProfit};
$eup *= (1.0-$loss_per_delay_slot) ** $sf->{Org};
$cplex .= sprintf "
%+.20f %s", $eup, $sf->{Var};
+ if ($qa->{ShowStalls}>=2) {
+ my $stall= $sf->{Flow}{'dst_stallid'};
+ push @{ $stall_poe_limits{$stall} }, $sf;
+ }
}
$cplex .= "
$cplex.= "\n";
}
+if ($qa->{ShowStalls}>=2) {
+ my $stallpoe= $dbh->prepare(<<END);
+SELECT max(qty*price) FROM buy WHERE stallid=?
+END
+ foreach my $stallid (sort { $a <=> $b } keys %stall_poe_limits) {
+ $stallpoe->execute($stallid);
+ my ($lim)= $stallpoe->fetchrow_array();
+ $stallpoe->finish();
+ $cplex.= "
+ ". sprintf("%-15s","poe_$stallid:")." ".
+ join(" + ", map {
+ sprintf "%d %s", $_->{Flow}{'dst_price'}, $_->{Var};
+ } @{ $stall_poe_limits{$stallid} }).
+ " <= $lim";
+ }
+ $cplex.= "\n";
+}
+
$cplex.= "
Bounds
".(join "
my $input= pipethrough_prep();
print $input $cplex or die $!;
my $output= pipethrough_run_along($input, undef, 'glpsol',
- qw(glpsol --tmlim 2 --memlim 5 --intopt --cuts --bfs
+ qw(glpsol --tmlim 5 --memlim 5 --intopt --cuts --bfs
--cpxlp /dev/stdin -o /dev/stdout));
print "<pre>\n" if $qa->{'debug'};
my $found_section= 0;