From: Ian Jackson Date: Sat, 22 Aug 2009 15:27:24 +0000 (+0100) Subject: prepare cplex input file for glpsol X-Git-Tag: 3.4~145 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=commitdiff_plain;h=327dd80f71ae99180d1895166307cdb2add3618a prepare cplex input file for glpsol --- diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index de9e73c..1924503 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -118,17 +118,64 @@ my @flows; % } +% { <& dumpqueryresults:start, sth => $sth &> -% my $flow; -% while ($flow= $sth->fetchrow_hashref()) { +% my $flow; +% while ($flow= $sth->fetchrow_hashref()) { +% $flow->{Ix}= @flows; +% $flow->{Var}= "f$flow->{Ix}"; % push @flows, $flow; <& dumpqueryresults:row, sth => $sth, row => $flow &> -% } +% } <& dumpqueryresults:end &> +% } <%perl> +my $cplex= " +Maximize + + totalprofit: + ".(join " + + ", map { "$_->{profit} $_->{Var}" } @flows)." + +Subject To +"; + +my %avail_csts; +foreach my $flow (@flows) { + foreach my $od (qw(org dst)) { + my $cstname= join '_', + 'avail', + $flow->{'commodid'}, + $od, + $flow->{"${od}_id"}, + $flow->{"${od}_price"}; + push @{ $avail_csts{$cstname}{Flows} }, $flow->{Var}; + $avail_csts{$cstname}{Qty}= $flow->{"${od}_qty"}; + } +} +foreach my $cstname (sort keys %avail_csts) { + my $c= $avail_csts{$cstname}; + $cplex .= " + ". sprintf("%-30s","$cstname:")." ". + join("+", @{ $c->{Flows} }). + " <= ".$c->{Qty}."\n"; +} + +$cplex.= " +Bounds + ".(join " + ", map { "$_->{Var} >= 0" } @flows)." + +End +"; +# glpsol --cpxlp /dev/stdin +
+<% $cplex |h %>
+
<%init> use CommodsWeb;