#!/usr/bin/python3
# ====================================================================
# Truck transportation problem
# ---- x = number of type A trucks
# ---- refrigerated capacity of 20 cubic meters
# ---- non-refrigerated capacity of 40 cubic meters
# ---- cost per kilometer is 30
# ---- y = number of type B trucks
# ---- refrigerated capacity of 30 cubic meters
# ---- non-refrigerated capacity of 30 cubic meters
# ---- cost per kilometer is 40
# ----
# ---- ship refrigerated 3000 cubic meters
# ---- ship non-refrigerated 4000 cubic meters
# minimize cost
# -------------------------------------------------------------------
# Problem From : www.superprof.co.uk/resources/academic/maths/
# linear-algebra/linear-programming/
# linear-programming-problems-and-solutions.html
# ====================================================================
import pulp as pl
# ---- define variables
x = pl.LpVariable('x',0,None,cat='integer')
y = pl.LpVariable('y',0,None,cat='integer')
# ---- define problem
prob = pl.LpProblem('TransportationCompanyProblem', pl.LpMinimize)
# ---- add objective function (minimum cost per kilometer)
prob += 30*x + 40*y
# ---- add constraint refrigerated capacity required
prob += 20*x + 30*y >= 3000
# ---- add constraint non-refrigerated capacity required
prob += 40*x + 30*y >= 4000
# ---- solve problem (using default solver)
status = prob.solve()
print(f'status = {pl.LpStatus[status]}')
# ---- describe solution
x = pl.value(x)
y = pl.value(y)
print('solution from web site:')
print(' type A = 51 trucks')
print(' type B = 66 trucks')
print(' min cost = 4170 per kilometer')
print(f'{x} type A trucks')
print(f'{y} type B trucks')
print(f'min cost = {30*x + 40*y} per kilometer')