Python TypeError:“str”和“int”的实例之间不支持“>”

问题描述

我的桌子有 10 件物品的最小和最大数量限制。优化器应输出满足约束(总最大容量为 5000 件)的最佳数量并最大限度地节省成本。如果某个项目的预测数量大于 0,则它应该在已设置的最大值和最小值范围内。

这是在python中使用gurobi库的优化器代码

%python
import pandas as pd
import gurobipy as gp
from gurobipy import *
from rsecommon.analytics.gurobi import *
try:

    instance = rseenv.RseGurobiEnv.getInstance()
    env = instance.getGurobiEnv()
    
    # Model
    deal = Model("Deal Optimization",env)
    
    # Parameters
    items = ['item1','item2','item3','item4','item5','item6','item7','item8','item9','item10']
    volumes = {'item1':1,'item2':1,'item3':2,'item4':2,'item5':3,'item6':3,'item7':4,'item8':4,'item9':5,'item10':5}
    discounts = {'item1':0.05,'item2':0.04,'item3':0.01,'item4':0.08,'item5':0.06,'item6':0.02,'item7':0.01,'item8':0.09,'item9':0.06,'item10':0.09}
    min_qty = {'item1':540,'item2':70,'item3':220,'item4':170,'item5':60,'item6':850,'item7':910,'item8':310,'item9':480,'item10':60}
    max2_qty = {'item1':540,'item2':140,'item4':340,'item6':1700,'item8':620,'item10':120}

    capacity_cap = 5000

    # Variables
    quantity = deal.addVars(items,lb= 0,ub = {(max2_qty[item] for item in max2_qty)},name='quantity')
    
    # Constraints
    deal.addConstr(((gp.quicksum(volumes[item]*quantity[item] for item in volumes) <= capacity_cap )),name="Capacity")

    # Set objective
    deal.setobjective(quantity.prod(discounts),GRB.MAXIMIZE) 

    # Optimize
    deal.optimize()

    for v in deal.getvars():
        print(v.varName,v.x)
    
    
    print("Optimal Cost Savings:",deal.ObjVal)

except GurobiError as e:
    print('Error code ' + str(e.errno) + ": " + str(e.message))

这是我希望添加的约束,但我认为我的逻辑是错误的:

deal.addConstrs(((gp.quicksum(volumes[item]*quantity[item] for item in volumes) >= min_qty[item] for item in min_qty if item > 0)),"Capacity")

错误是:

TypeError: '>' not supported between instances of 'str' and 'int'.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)