Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用纸浆优化的递归错误_Python_Optimization - Fatal编程技术网

Python 使用纸浆优化的递归错误

Python 使用纸浆优化的递归错误,python,optimization,Python,Optimization,我试图慢慢地放大一个优化问题,在这个阶段,我试图将用户输入的值引入一个比较约束。但是,正在抛出递归错误。我不确定我是否理解发生递归错误的原因以及如何修复它(请参阅约束部分的第一行)。当我硬编码一个值时,它会工作,但当我使用用户输入时,它会抛出一个错误 作为奖励,如果有人知道如何循环约束,我将非常感激。这件事我已经忙了一段时间了。最终,这将有10名员工和多达55个不同的部分,所以我认为在添加约束时循环将更容易。我在网上查过了,但还没有找到任何帮助 # Initial User Input tota

我试图慢慢地放大一个优化问题,在这个阶段,我试图将用户输入的值引入一个比较约束。但是,正在抛出递归错误。我不确定我是否理解发生递归错误的原因以及如何修复它(请参阅约束部分的第一行)。当我硬编码一个值时,它会工作,但当我使用用户输入时,它会抛出一个错误

作为奖励,如果有人知道如何循环约束,我将非常感激。这件事我已经忙了一段时间了。最终,这将有10名员工和多达55个不同的部分,所以我认为在添加约束时循环将更容易。我在网上查过了,但还没有找到任何帮助

# Initial User Input
total_parts = int(input("Enter number of different parts: "))
partno = []
quantity = []
for i in range(total_parts):
    pn = input("Enter Part Number : ").strip()
    qty = input("Enter Qty of Part Number : ")
    partno.append(pn)
    quantity.append(qty)

# Pulp Model
model = pulp.LpProblem("Part production", pulp.LpMinimize)

# Construct decision variable lists
part_numbers = partno
employees = ['Employee A', 'Employee B', 'Employee C']

qty_produced = pulp.LpVariable.dicts("production",
                                     ((i, j) for i in part_numbers for j in employees),
                                     lowBound=0,
                                     cat='Continuous')
# Objective Function
model += ((
    (pulp.lpSum(
        ((10 * qty_produced[part_numbers[0], employees[0]])/.5)
        +((10 * qty_produced[part_numbers[0], employees[1]])/.85)
       + ((10 * qty_produced[part_numbers[0], employees[2]])/.65)
        +((30 * qty_produced[part_numbers[1], employees[0]])/.85)
       + ((30 * qty_produced[part_numbers[1], employees[1]])/.75)
        +((30 * qty_produced[part_numbers[1], employees[2]])/.95)
))/6))

# Constraints
model += pulp.lpSum([qty_produced[part_numbers[0], j] for j in employees]) >= quantity[0]
model += pulp.lpSum([qty_produced[part_numbers[1], j] for j in employees]) >= 10
model += ((10 * qty_produced[part_numbers[0], employees[0]])/.5) + ((30 * qty_produced[part_numbers[1], employees[0]])/.85) <= 530
model += ((10 * qty_produced[part_numbers[0], employees[1]])/.5) + ((30 * qty_produced[part_numbers[1], employees[1]])/.85) <= 530
model += ((10 * qty_produced[part_numbers[0], employees[2]])/.5) + ((30 * qty_produced[part_numbers[1], employees[2]])/.85) <= 530

# Solve problem
model.solve()
pulp.LpStatus[model.status]

for var in qty_produced:
    var_value = qty_produced[var].varValue
    print("The quantity of {1} produced by {0} is {2}".format(var[1], var[0], var_value))

avg_time = pulp.value(model.objective)
#初始用户输入
总计零件=整数(输入(“输入不同零件的数量:”)
零件号=[]
数量=[]
对于范围内的i(总零件):
pn=输入(“输入零件号:”).strip()
数量=输入(“输入零件号的数量:”)
零件号附加(pn)
数量。追加(数量)
#纸浆模型
模型=纸浆.LpProblem(“零件生产”,纸浆.LpProblem)
#构造决策变量表
零件号=零件号
雇员=[“雇员A”、“雇员B”、“雇员C”]
生产数量=纸浆.LpVariable.dicts(“生产”,
((i,j)表示第i部分中的i,j表示员工中的j),
下限=0,
cat(连续)
#目标函数
型号+=((
(p.lpSum)(
((10*生产数量[零件号[0],员工[0]])/.5)
+(10*生产数量[零件号[0],员工[1]])/.85)
+((10*生产数量[零件号[0],员工[2]])/.65)
+(30*生产数量[零件号[1],员工[0]])/.85)
+((30*生产数量[零件号[1],员工[1]])/.75)
+(30*生产数量[零件号[1],员工[2]])/.95)
))/6))
#约束条件
型号+=纸浆.lpSum([生产数量[零件编号[0],j]用于员工中的j])>=数量[0]
型号+=纸浆lpSum([生产数量[零件编号[1],j]用于员工中的j])>=10

模型+=((10*生产数量[零件编号[0],员工[0]])/.5)+((30*生产数量[零件编号[1],员工[0]])/.85)您在这里的思路是正确的,但有几个问题。我不确定你会在这里弹出一个递归错误。您必须发布完整的代码和错误消息w/行参考以获取帮助

根据你的意见。。。我看不出您在哪里将数量转换为整数?回想一下,所有键盘输入都作为字符串输入,因此需要进行转换。不过,在调试时,最好在开始时制作一些字典来保存数据,这样就不会重复输入数据。以后,如果需要,您可以通过键盘输入动态构建相同的词典/列表。还包括其他模型参数,如obj函数中使用的系数和数量限制。这将允许您清理约束。这里有一个想法来展示我的想法

import pulp

## Data

employees = {'bob', 'cindy', 'tom'}
parts = {'A19', 'X22'}
max_quantities = {  'A19': 200,
                    'X22': 150}

## Model
prob = pulp.LpProblem('sample', pulp.LpMinimize)

X = pulp.LpVariable.dicts("produce", [(e, p) for e in employees for p in parts],
                            lowBound=0, cat="Integer")

# max_production
for p in parts:
    prob += pulp.lpSum(X[e, p] for e in employees) <= max_quantities[p]

print(prob)
进口纸浆
##资料
员工={'bob','cindy','tom'}
部分={'A19','X22'}
最大数量={A19':200,
'X22':150}
##模型
prob=纸浆.LpProblem('sample',纸浆.LpProblem)
X=纸浆.LpVariable.dicts(“生产”,[(e,p)代表员工中的e代表零件中的p],
下限=0,cat=“整数”)
#最大产量
对于零件中的p:
prob+=矿浆lpSum(员工中e的X[e,p]