The goal of the python model below is to choose the trucks with total minimum cost to fulfill all orders. I treat the truck type as 1 truck in the following code, but in fact, a truck type can have infinite number of truck, in that case, how should I modified the constraints and objective functions to fit that?
import pandas as pdimport docplex.mpfrom docplex.mp.model import Modeldf_order = pd.DataFrame([[1,5000],[2,1000],[3,2000]], columns =['OrderID','Weight']) orders = df_order['OrderID'].values.tolist()df_order.set_index('OrderID', inplace=True)df_truck_types = pd.DataFrame([[1,'TYPE1',20000,'SP TRANSPORTS',40000],[2,'TYPE2',20000,'SP TRANSPORTS',40000],[3,'TYPE3',10000,'SP TRANSPORTS',30000]], columns =['TruckTypeID','VehicleType','Capacity','Transporter','TruckCost']) truck_types = df_truck_types['TruckTypeID'].values.tolist()df_truck_types.set_index('TruckTypeID', inplace=True)def get_order(o):return df_order.loc[o]def get_truck_type(f):return df_truck_types.loc[f]# Decision Variable and Objective Functionmdl = Model(name='itc_load_planning')Assignment = mdl.binary_var_matrix(orders, truck_types, name='Assignment')#for objective 1TruckCost=mdl.sum(Assignment[o,f] * get_truck_type(f).TruckCost for o in orders for f in truck_types)mdl.minimize(TruckCost)# C1for o in orders:mdl.add_constraint(mdl.sum(Assignment[o,f] for f in truck_types)==1, "C1")# solve modelprint("===solution===")si = mdl.solve()mdl.print_solution()------------------------------
Jack Tan
------------------------------
#DecisionOptimization