2017-04-26 92 views
2

simannealパッケージhttps://github.com/perrygeo/simannealでシミュレーテッドアニーリングを使用して、自分の関数/オブジェクトのパラメータを最適化しようとしています。次のように 私のコードでは、なりますsimannealパッケージの使用方法

from simanneal import Annealer 

class ReservoirAnnealer(Annealer): 

    def __init__(self, state, res): 
     self.reservoir = res 
     self.resSize = np.size(self.reservoir.W_top) 
     super(ReservoirAnnealer, self).__init__(state) 


    def move(self): 
     a = random.randint(0, self.resSize) 
     b = random.randint(0, self.resSize) 
     self.state[a,b] ^= 1 

    def energy(self): 
     reservoir.W = self.state 
     return reservoir.fit(data, 1500, penalty=5e-7, errorEvaluationLength=750) 

reservoir = Reservoir(1,1023,spectralRadius=1.25,inputScaling=1,leakingRate=0.3, transientTime=100) 
initialState = reservoir.W_top.ravel() 
annealer = ReservoirAnnealer(initialState, reservoir) 

W_topが0または内部の1のいずれかの行列であるので、このような何か:私は上記のコードを実行すると

[ 1. 1. 1. ..., 0. 0. 1.] 

、私はエラーを取得しています:

ValueError        Traceback (most recent call last) 
<ipython-input-87-5a5b9eb8c324> in <module>() 
    20 reservoir = Reservoir(1,1023,spectralRadius=1.25,inputScaling=1,leakingRate=0.3, transientTime=100) 
    21 initialState = reservoir.W_top.ravel() 
---> 22 annealer = ReservoirAnnealer(initialState, reservoir) 
    23 #itinearay, cost = annealer.anneal() 

<ipython-input-87-5a5b9eb8c324> in __init__(self, state, res) 
     6   self.reservoir = res 
     7   #self.resSize = np.size(self.reservoir.W) 
----> 8   super(ReservoirAnnealer, self).__init__(state) 
     9 
    10 

C:\Users\Luca\Anaconda3\lib\site-packages\simanneal\anneal.py in __init__(self, initial_state, load_state) 
    45 
    46  def __init__(self, initial_state=None, load_state=None): 
---> 47   if initial_state: 
    48    self.state = self.copy_state(initial_state) 
    49   elif load_state: 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

私は本当に知っている、何を意味する。元の例は辞書で動作しますが、私の行列はかなり大きく、辞書に入れたくありません。 誰かがライブラリを正しく使う方法を知っていますか?

+0

フルトレースバック? – user3684792

+1

その代わりにリストを渡してください(init関数 - なぜnumpy配列のif文が失敗するのでしょうか) – user3684792

+0

ああ、ありがとう、それは –

答えて

2

リストを渡します。 numpy配列のif文のために失敗しています。@ line anneal:47