chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.main.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix up search too long error message - really fix up
[ypp-sc-tools.main.git]
/
yarrg
/
web
/
routetrade
diff --git
a/yarrg/web/routetrade
b/yarrg/web/routetrade
index 9660094532aa1544fb5db23092546991c098ee75..59b02674f1034bb82c983f803afa44e54600075b 100644
(file)
--- a/
yarrg/web/routetrade
+++ b/
yarrg/web/routetrade
@@
-39,6
+39,8
@@
$dbh
@archipelagoes
$qa
$routeparams
@archipelagoes
$qa
$routeparams
+$reset_suppressions
+$quri
</%args>
<& query_age:pageload &>
</%args>
<& query_age:pageload &>
@@
-47,6
+49,9
@@
$routeparams
my $loss_per_league= defined $routeparams->{LossPerLeaguePct}
? $routeparams->{LossPerLeaguePct}*0.01 : 1e-7;
my $loss_per_delay_slot= 1e-8;
my $loss_per_league= defined $routeparams->{LossPerLeaguePct}
? $routeparams->{LossPerLeaguePct}*0.01 : 1e-7;
my $loss_per_delay_slot= 1e-8;
+my $max_gems= 24;
+
+my $minprofit= $routeparams->{MinProfit} || 0;
my $now= time;
my $now= time;
@@
-143,6
+148,7
@@
my $stmt= "
commods.ordval ordval,
commods.posinclass posinclass,
commods.commodclassid commodclassid,
commods.ordval ordval,
commods.posinclass posinclass,
commods.commodclassid commodclassid,
+ commods.flags flags,
dist dist,
buy.price - sell.price unitprofit
FROM commods
dist dist,
buy.price - sell.price unitprofit
FROM commods
@@
-275,13
+281,21
@@
Searched for arbitrage trades only, in <% $archipelagoes[0] |h %>
<%perl>
<%perl>
-my @sail_total;
-
if (!@flows) {
print 'No profitable trading opportunities were found.';
return;
}
if (!@flows) {
print 'No profitable trading opportunities were found.';
return;
}
+my @sail_total;
+my %opportunity_value;
+
+my $oppo_key= sub {
+ my ($f) = @_;
+ return join '_', map { $f->{$_} } qw(org_id dst_id commodid);
+};
+
+my $any_previous_suppression= 0;
+
foreach my $f (@flows) {
$f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'}
foreach my $f (@flows) {
$f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'}
@@
-306,6
+320,8
@@
foreach my $f (@flows) {
$dists{'org_id'}{'dst_id'}= $f->{'dist'};
$dists{'org_id'}{'dst_id'}= $f->{'dist'};
+ $opportunity_value{ $oppo_key->($f) } += $f->{MaxProfit};
+
my @uid= $f->{commodid};
foreach my $od (qw(org dst)) {
push @uid,
my @uid= $f->{commodid};
foreach my $od (qw(org dst)) {
push @uid,
@@
-368,11
+384,21
@@
foreach my $f (@flows) {
$f->{UidLong} eq $recons_long or
die "$f->{UidLong} = $f->{UidShort} = $recons_long ?";
}
$f->{UidLong} eq $recons_long or
die "$f->{UidLong} = $f->{UidShort} = $recons_long ?";
}
+}
- if (defined $qa->{"R$f->{UidShort}"} &&
- !defined $qa->{"T$f->{UidShort}"}) {
- $f->{Suppress}= 1;
+foreach my $f (@flows) {
+
+ if ($reset_suppressions || !defined $qa->{"R$f->{UidShort}"}) {
+ if ($opportunity_value{ $oppo_key->($f) } < $minprofit) {
+ $f->{Suppress}= 1;
+ }
} else {
} else {
+ if (!defined $qa->{"T$f->{UidShort}"}) {
+ $any_previous_suppression= 1;
+ $f->{Suppress}= 1;
+ }
+ }
+ if (!$f->{Suppress}) {
my $sfis= $ipair2subflowinfs{$f->{'org_id'},$f->{'dst_id'}};
foreach my $sfi (@$sfis) {
my $subflow= {
my $sfis= $ipair2subflowinfs{$f->{'org_id'},$f->{'dst_id'}};
foreach my $sfi (@$sfis) {
my $subflow= {
@@
-392,13
+418,24
@@
foreach my $f (@flows) {
}
</%perl>
}
</%perl>
-% my $optimise= $specific;
-% if (!$optimise) {
+% my $optimise= 1;
-<p>
% if (!$specific) {
% if (!$specific) {
+% $optimise= 0;
Route contains archipelago(es), not just specific islands.
Route contains archipelago(es), not just specific islands.
+% } elsif (!@subflows) {
+% $optimise= 0;
+% if ($any_previous_suppression) {
+All available trades deselected.
+% } else {
+No available trades meet the specified minimum trade value, so
+all available trades deselected.
+% }
% }
% }
+
+% if (!$optimise) {
+
+<p>
Therefore, optimal voyage trade plan not calculated.
% } else { # ========== OPTMISATION ==========
Therefore, optimal voyage trade plan not calculated.
% } else { # ========== OPTMISATION ==========
@@
-491,6
+528,14
@@
foreach my $ci (0..($#islandids-1)) {
$applylimit->('mass', sub { $_[0]{'unitmass'} *1e-3 });
$applylimit->('volume', sub { $_[0]{'unitvolume'}*1e-3 });
$applylimit->('capital', sub { $_[0]{'org_price'} });
$applylimit->('mass', sub { $_[0]{'unitmass'} *1e-3 });
$applylimit->('volume', sub { $_[0]{'unitvolume'}*1e-3 });
$applylimit->('capital', sub { $_[0]{'org_price'} });
+
+ my @gem_subflows= grep { $_->{Flow}{flags} =~ m/g/ } @rel_subflows;
+ if (@gem_subflows) {
+ $cplex .= "
+ ". sprintf("%-10s","gems_$ci:")." ".
+ join(" + ", map { $_->{Var} } @gem_subflows). " <= $max_gems";
+ }
+
$cplex.= "\n";
}
$cplex.= "\n";
}
@@
-715,6
+760,7
@@
Generated by YARRG at <strong><%
orgArbitrage => 0,
dstArbitrage => 0,
} unless $$todo;
orgArbitrage => 0,
dstArbitrage => 0,
} unless $$todo;
+ $$todo->{'commodid'}= $f->{'commodid'};
$$todo->{'commodname'}= $f->{'commodname'};
$$todo->{'posinclass'}= '';
my $incl= $f->{'posinclass'};
$$todo->{'commodname'}= $f->{'commodname'};
$$todo->{'posinclass'}= '';
my $incl= $f->{'posinclass'};
@@
-802,9
+848,13
@@
END
% $total += $t->{Total};
% my $span= 0 + keys %{ $t->{Stalls} };
% my $td= "td rowspan=$span";
% $total += $t->{Total};
% my $span= 0 + keys %{ $t->{Stalls} };
% my $td= "td rowspan=$span";
+% my %linkqf= (%{ $qa->{'baseqf'} }, %{ $qa->{'queryqf'} });
+% $linkqf{'query'}= 'commod';
+% $linkqf{'commodstring'}= $t->{'commodname'};
+% $linkqf{'commodid'}= $t->{'commodid'};
% tr_datarow($m,$dline);
<<% $td %>><% $collectdeliver %>
% tr_datarow($m,$dline);
<<% $td %>><% $collectdeliver %>
-<<% $td %>><
% $t->{'commodname'} |h %
>
+<<% $td %>><
a href="<% $quri->(%linkqf) %>"><% $t->{'commodname'} |h %></a
>
<<% $td %>><% $t->{'posinclass'} %>
%
% my @stalls= sort keys %{ $t->{Stalls} };
<<% $td %>><% $t->{'posinclass'} %>
%
% my @stalls= sort keys %{ $t->{Stalls} };