在我试图实现一个约束的代码中,总和等于需求,使用总和,然后分别对其进行分割,如
中的代码所示。self.MaX[o].x=self.MaX[o].x*DEMAND/ToT
这是我实施约束的地方。
然而,当以前我只使用直接变量而不使用任何列表时,代码工作正常,但在我介绍了List之后我已经开始遇到这个问题,其中值没有像我预期的那样改变,或者他们的方式它应该在逻辑上改变。
你可以看到代码实现后的ToT值应该等于DEMAND,但是没有发生。
class chromosome:
def __init__(self,identifier):
self.x=D.PDF[identifier].rvs()
self.identifier=identifier
class individual:
def __init__(self):
self.MaX=[]
for o in range(3):
self.MaX.append(chromosome(o))
ToT=sum(chromosome.x for chromosome in self.MaX)
print("before changing total is {}".format(ToT))
for i in range(D.COEF.shape[1]):
print("Individual values before {}".format(self.MaX[o].x))
self.MaX[o].x=self.MaX[o].x*DEMAND/ToT
print("Individual values after {}".format(self.MaX[o].x))
ToT=sum(chromosome.x for chromosome in self.MaX)
print("after changing total is {}".format(ToT))
此处D.PDF是以下列方式创建的自定义概率分布列表。
from scipy import stats
import scipy.ndimage
for j in range(3):
D.space[j]=np.ones(DEMAND, dtype=np.float32)
D.space[j]=scipy.ndimage.filters.gaussian_filter1d(D.space[j],10)
D.space[j]=D.space[j]/D.space[j].sum()
D.PDF[j] = stats.rv_discrete(name='pdfX'.format(j), values=(np.arange(DEMAND), D.space[j]))
请帮助解决出错的问题。我没有看到任何逻辑错误,使用列表进行此类工作是否有任何问题请告诉我。
答案 0 :(得分:2)
在第二个for循环中,您的变量为i
,但您引用了o
(来自之前的for循环),因此您只需覆盖最后一个项目self.MaX
几次。{/ p>