set FIELDS; set REFINERIES; set PIPES within (FIELDS cross REFINERIES); set CRUDE; set PRODUCTS; set LIMITS2CAPACITY; param capfield {FIELDS} >= 0; param caprefinery {REFINERIES} >= 0; param cappipe {PIPES} >= 0; param weight {CRUDE} >= 0; param politicalcapital >= 0; param valProduce {REFINERIES,PRODUCTS} >= 0; param proportion {CRUDE,PRODUCTS} >= 0; param poliBudgetL2C {LIMITS2CAPACITY} >= 0; param lobby_return {LIMITS2CAPACITY} >= 0; param poliBudgetFuture >= 0; param returnBudgetFuture >= 1; param fullFields {LIMITS2CAPACITY,FIELDS} >= 0; param fullRefineries {LIMITS2CAPACITY,REFINERIES} >= 0; param fullPipes {LIMITS2CAPACITY,PIPES} >= 0; var Flow{PIPES,CRUDE,PRODUCTS} >= 0; var Produce{REFINERIES,PRODUCTS} >= 0; var L2CFields {l in LIMITS2CAPACITY, i in FIELDS} >= 0, <= fullFields[l,i]; var L2CRefineries {l in LIMITS2CAPACITY, j in REFINERIES} >= 0, <= fullRefineries[l,j]; var L2CPipes {l in LIMITS2CAPACITY, (i,j) in PIPES} >= 0, <= fullPipes[l,i,j]; var BudgetL2C{LIMITS2CAPACITY} >= 0; var BudgetFuture >= 0; maximize profit: sum {j in REFINERIES, k in PRODUCTS} valProduce[j,k]*Produce[j,k] + (returnBudgetFuture-1) * BudgetFuture - sum{l in LIMITS2CAPACITY} BudgetL2C[l] / lobby_return[l]; subject to product_refinery_balance {j in REFINERIES, k in PRODUCTS}: sum {(i,j) in PIPES, l in CRUDE} Flow[i,j,l,k] = Produce[j,k]; subject to refine {j in REFINERIES, l in CRUDE, k in PRODUCTS}: sum {(i,j) in PIPES} Flow[i,j,l,k] = proportion[l,k] * Produce[j,k]; subject to capfield_effective {m in LIMITS2CAPACITY, i in FIELDS}: sum {(i,j) in PIPES, l in CRUDE, k in PRODUCTS} weight[l]*Flow[i,j,l,k] <= L2CFields[m,i] * capfield[i] / fullFields[m,i]; subject to cappipe_effective {m in LIMITS2CAPACITY, (i,j) in PIPES}: sum {l in CRUDE, k in PRODUCTS} Flow[i,j,l,k] <= L2CPipes[m,i,j] * cappipe[i,j] / fullPipes[m,i,j]; subject to caprefinery_effective {m in LIMITS2CAPACITY, j in REFINERIES}: sum {(i,j) in PIPES, l in CRUDE, k in PRODUCTS} Flow[i,j,l,k] <= L2CRefineries[m,j] * caprefinery[j] / fullRefineries[m,j]; subject to budgetcap {l in LIMITS2CAPACITY}: sum {i in FIELDS} L2CFields[l,i] + sum {j in REFINERIES} L2CRefineries[l,j] + sum {(i,j) in PIPES} L2CPipes[l,i,j] <= BudgetL2C[l]; subject to policap_budget: sum{l in LIMITS2CAPACITY} poliBudgetL2C[l] * BudgetL2C[l] + poliBudgetFuture * BudgetFuture <= politicalcapital;