'Python: Setting the objective function in pulp

Im trying to set the objective function, which is to maximize the sales,

df.index = ['City 1', 'City 2', 'City 3', 'City 4', 'City 5', 'City 6', 'City 7',
            'City 8', 'City 9', 'City 10', 'City 11', 'City 12', 'City 13']

df['Sales'] = [372.0, 404.0, 319.0, 212.0, 206.0, 287.0, 181.0, 483.0, 376.0, 269.0, 
               354.0, 278.0, 333.0]

df['Cost'] = [178.56, 311.08, 102.08, 116.60, 160.68, 192.29, 128.51, 
              236.67, 251.92, 78.01, 233.64, 100.08, 183.15]

CITY_SALES = {k:v for k,v in zip(df.index, df['Sales'])}
CITY_COST = {k:v for k,v in zip(df.index, df['Cost'])}

from pulp import *

PROB = LpProblem('MAX_PROB', LpMaximize)
CITY_VARS = LpVariable.dicts('city', df.index, lowBound=0, cat=0) #Decision Vars
PROB += lpSum(CITY_COST[c] * CITY_VARS[c] for c in df.index) #Objective Function

print(PROB)

Output:

> KeyError                                  Traceback (most recent call last)
<ipython-input-55-ecd06f0a5060> in <module>()
     17 PROB += lpSum(CITY_COST[c] * CITY_VARS[c] for c in df.index) #Objective Function
     18 
---> 19 print(PROB)

/usr/local/lib/python3.7/dist-packages/pulp/pulp.py in __repr__(self)
   1388         s += "VARIABLES\n"
   1389         for v in self.variables():
-> 1390             s += v.asCplexLpVariable() + " " + const.LpCategories[v.cat] + "\n"
   1391         return s
   1392 

KeyError: 0

I am expecting to see some summary, But I get a KeyError instead, Where did I get this wrong? How do I make the objective function work?



Solution 1:[1]

In your variable declaration, you are declaring cat=0 ?? I think that is causing some internal catastrophe in pulp

The only valid options are Continuous, Integer, Binary

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 AirSquid