@archipelagoes
$qa
$routeparams
+$reset_suppressions
</%args>
<& query_age:pageload &>
? $routeparams->{LossPerLeaguePct}*0.01 : 1e-7;
my $loss_per_delay_slot= 1e-8;
+my $minprofit= $routeparams->{MinProfit} || 0;
+
my $now= time;
my @flow_conds;
<%perl>
-my @sail_total;
-
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);
+};
+
foreach my $f (@flows) {
$f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'}
$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,
$f->{UidLong} eq $recons_long or
die "$f->{UidLong} = $f->{UidShort} = $recons_long ?";
}
+}
+
+foreach my $f (@flows) {
- if (defined $qa->{"R$f->{UidShort}"} &&
- !defined $qa->{"T$f->{UidShort}"}) {
- $f->{Suppress}= 1;
+ if ($reset_suppressions || !defined $qa->{"R$f->{UidShort}"}) {
+ if ($opportunity_value{ $oppo_key->($f) } < $minprofit) {
+ $f->{Suppress}= 1;
+ }
} else {
+ if (!defined $qa->{"T$f->{UidShort}"}) {
+ $f->{Suppress}= 1;
+ }
+ }
+ if (!$f->{Suppress}) {
my $sfis= $ipair2subflowinfs{$f->{'org_id'},$f->{'dst_id'}};
foreach my $sfi (@$sfis) {
my $subflow= {