import csv from pulp import LpProblem, LpVariable, LpMinimize, value #Make new LP Problem problem = LpProblem("Diet Problem", LpMinimize) # Open both CSV files data_reader = csv.reader(open("DietProblemData.csv",'rU')) constraint_reader = csv.reader(open("Constraints.csv",'rU')) data_reader.next() constraint_reader.next() variables,nutrients,costs,names = [],[],[],[] for row in data_reader: variables.append( LpVariable("x_" + row[1], 0)) nutrients.append( map( float , row[2 : -1])) names.append ( row[0] ) costs.append( float(row[-1]) ) # add constraints for each nutrient for row_num,row in enumerate(constraint_reader): min_constraint = 0 * variables[0] >= float(row[2]) max_constraint = 0 * variables[0] <= float(row[3]) for i in range(len(variables)): min_constraint += variables[i] * nutrients[i][row_num] max_constraint += variables[i] * nutrients[i][row_num] problem += min_constraint problem += max_constraint # add objective function obj_fn = 0 * variables[0] for i in range(len(variables)): obj_fn += variables[i] * costs[i] problem += obj_fn problem.solve() for i in range(len(variables)): if value(variables[i]) > 0.00001: print names[i].rjust(20) + " => " + str(value(variables[i])) print "cost: " + str(value(obj_fn))