#!/usr/bin/python3 # ==================================================================== # Truck transportation problem # ---- x = number of type A trucks # ---- refrigerated capacity of 20 cubic meters # ---- non-refrigerated capacity of 30 cubic meters # ---- cost per kilometer is 30 # ---- cost per kilometer (original problem is 40) *********** # ---- y = number of type B trucks # ---- refrigerated capacity of 30 cubic meters # ---- non-refrigerated capacity of 30 cubic meters # ---- cost per kilometer is 40 # ---- z = number of type C trucks # ---- refrigerated capacity of 20 cubic meters # ---- non-refrigerated capacity of 55 cubic meters # ---- cost per kilometer is 20 # ---- # ---- 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 import math # ---- define variables x = pl.LpVariable('x',0,None,cat='integer') y = pl.LpVariable('y',0,None,cat='integer') z = pl.LpVariable('z',0,None,cat='integer') # ---- define problem prob = pl.LpProblem('TransportationCompanyProblem', pl.LpMinimize) # ---- add objective function (minimum cost per kilometer) ##prob += 30*x + 40*y + 20*z prob += 30*x + 30*y + 20*z # ---- add constraint refrigerated capacity required prob += 20*x + 30*y + 20*z >= 3000 # ---- add constraint non-refrigerated capacity required prob += 40*x + 30*y + z*55 >= 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) z = pl.value(z) print() print('---- solution from web site --------------------') print(' original problem only had x,y variables') print('type A = 51 trucks') print('type B = 66 trucks') print('min cost = 4170 per kilometer') print('---- solution calculated -----------------------') print(f'{math.ceil(x)} type A trucks') print(f'{math.ceil(y)} type B trucks') print(f'{math.ceil(z)} type Z trucks') print(f'min cost = {round(30*x + 40*y + z*20)} per kilometer') print('------------------------------------------------')