2016-02-08 49 views
0

在我試圖實現一個約束,使得總數等於使用之和的它,然後各自分工要求,你可以在代碼中爲什麼在列表中的對象中值不會更改?

self.MaX[o].x=self.MaX[o].x*DEMAND/ToT 

這是看到了代碼我正在實施約束。

但是,當以前我只使用直接變量而不使用任何列表代碼工作正常,但在我介紹列表後,我開始有這個問題,價值沒有改變,因爲我預期它,或者他們它應該在邏輯上改變。

您可以在執行代碼後看到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])) 

請幫助一下出了什麼問題。我沒有看到任何邏輯錯誤,使用列表進行此類工作是否存在任何問題,請讓我知道。

回答

2

在你的第二個for循環,你的變量是i,但如果引用o(從以前的循環),那麼你只是在覆蓋self.MaX幾次的最後一個項目。

+0

我很尷尬,不知道我錯過了它... – Alexander

相關問題