Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 字典上的linalg.solve()迭代_Python_Numpy_Dictionary_Iteration - Fatal编程技术网

Python 字典上的linalg.solve()迭代

Python 字典上的linalg.solve()迭代,python,numpy,dictionary,iteration,Python,Numpy,Dictionary,Iteration,这里是背景:我必须生产不同产品的组合。 我不想为每种产品生产一批产品,但我想让每批产品尽可能的小和同质,每批产品都包含少量的总产量 我知道每种产品的需求: demands = {'p1': 140, 'p2': 220, 'p3': 275, 'p4': 320, 'p5': 60} 我知道我的工厂运行的时间(分钟): tdisp = 460 我计算每个产品的生产率(分钟/件): tts = {p: tdisp/demands[p] for p in demands} 我计算在给定时间内我

这里是背景:我必须生产不同产品的组合。 我不想为每种产品生产一批产品,但我想让每批产品尽可能的小和同质,每批产品都包含少量的总产量

我知道每种产品的需求:

demands = {'p1': 140, 'p2': 220, 'p3': 275, 'p4': 320, 'p5': 60}
我知道我的工厂运行的时间(分钟):

tdisp = 460
我计算每个产品的生产率(分钟/件):

tts = {p: tdisp/demands[p] for p in demands}
我计算在给定时间内我能容纳的最大批次数,将一个批次的长度视为生产最慢零件所需的时间:

n_seq = math.ceil(tdisp/max(tts.values()))
我考虑一个批次的长度和每一个产品的生产速度的比率,看看每一个产品我能适应多少个:

tt_ratios = {p: max(tts.values())/tts[p] for p in tts}
在许多情况下,这些值不是整数,但它们必须是整数,因为我们谈论的是单个片段! 所以我计算上下两个值:

tt_ratios_ceil = {p: math.ceil(tt_ratios[p]) for p in tt_ratios}
tt_ratios_floor = {p: math.floor(tt_ratios[p]) for p in tt_ratios}
如果我按照ceil生产,我会生产过剩,如果我按照地板生产,我将无法满足需求。 所以我必须为一定数量的批次生产地板,为剩余部分生产天花板。 我想做的是为每个产品解决一个系统,如下所示:

n*x +N*y = demands[part]
x + y = n_seq
n为小写,n为大写,x,y为相应的序列数

这是完整的代码:

import math
import numpy as np

demands = {'p1': 140, 'p2': 220, 'p3': 275, 'p4': 320, 'p5': 60}
tdisp = 460
tts = {p: tdisp/demands[p] for p in demands}
n_seq = math.ceil(tdisp/max(tts.values()))
tt_ratios = {p: max(tts.values())/tts[p] for p in tts}

tt_ratios_ceil = {p: math.ceil(tt_ratios[p]) for p in tt_ratios}
tt_ratios_floor = {p: math.floor(tt_ratios[p]) for p in tt_ratios}

splits = {}
for p in tt_ratios:
    if tt_ratios[p] != 1:
        split = np.linalg.solve([[tt_ratios_floor[p], tt_ratios_ceil[p]], [1, 1]], [demands[p], n_seq])
    else:
        split = n_seq
    splits.update({p: {'min': [tt_ratios_floor[p], split[0]], 'max': [tt_ratios_ceil[p], split[1]]}})

print(splits)
但我得到的结果是:

回溯(最近一次呼叫最后一次):

文件“C:\Users\damia\PycharmProjects\logistic\u management\u tool\try.py”,第19行,在

更新({p:{'min':[tt_比率_地板[p],分割[0]],'max':[tt_比率_天花板[p],分割[1]})


TypeError:“int”对象不可下标

代码的问题在
else
子句中,您将
split
设置为
int
。事实上,您随后会尝试立即调用
split[1]
,从而得到一个错误。 此问题的解决方案是复制
拆分。更新
指令并将其修改为使用
int
,如下所述:

如果tt_比率[p]!=1:
split=np.linalg.solve([[tt_比率_loor[p],tt_比率_ceil[p]],[1,1]],[requires[p],n_seq])
更新({p:{'min':[tt_比率_地板[p],分割[0]],'max':[tt_比率_天花板[p],分割[1]})
其他:
拆分=n_seq
更新({p:{'min':[tt_比率_floor[p],split],'max':[tt_比率_ceil[p],split]})

这里的问题是当您将
split
设置为
nseq
(一个int),然后在更新字典时尝试调用
split[1]
。哇,谢谢,我没有看到它!