set ORIG; # origins
set DEST; # destinations
set PROD; # products
param supply {ORIG,PROD} >= 0; # prod.capacity
param demand {DEST,PROD} >= 0; #amounts required at destinations
check {p in PROD}:
sum {i in ORIG} supply[i,p] = sum {j in DEST} demand[j,p];
param limit {ORIG,DEST} >= 0;
param trans_cost {PROD} >= 0; # trans_costs per unit & km in 1000 DM
param dist {ORIG,DEST} >= 0; # distances in km
param make_cost {ORIG,PROD} >= 0; # make cost in 1000 DM
param sales_price {DEST,PROD} >= 0; # sales price per car in 1000 DM
var Trans {ORIG,DEST,PROD} >= 0; # 1000 units to be shipped
var revenue; # in 1000 DM
var total_make_cost; # in 1000 DM
var total_trans_cost; # in 1000 DM
maximize profit:
revenue - total_make_cost - total_trans_cost;
subject to Revenue:
sum {i in ORIG,j in DEST,k in PROD}
sales_price[j,k] * 1000*Trans[i,j,k]=revenue;
subject to Total_make_cost:
sum {i in ORIG,j in DEST,k in PROD}
make_cost [i,k] * 1000*Trans[i,j,k]=total_make_cost;
subject to Total_trans_cost :
sum {i in ORIG,j in DEST,k in PROD}
trans_cost[k] * 1000*Trans[i,j,k] *dist[i,j]=total_trans_cost;
subject to Supply {i in ORIG, p in PROD}:
sum {j in DEST} Trans[i,j,p] = supply[i,p];
subject to Demand {j in DEST, p in PROD}:
sum {i in ORIG} Trans[i,j,p] = demand[j,p];