

Python で遺伝的アルゴリズムのエリート保存をしたいのですが、`fitness` の中で最小値を取り出して、保存している `max_value`
と入れ替えるにはどう書いたらいいでしょうか？

Python のリストで `fitness`
というもので適応度を計算するのですが、その適応度の最大値を別で保存しておいて、次の世代の計算でそれよりも小さい最大値が出た場合に適応度の最大を入れ替えるということをしたいのです。

[code]

    np.min(fitness).append(max_value)
    
[/code]

これではだめですよね。

### 追記

改めて自分で書いたコードではエラーが出ます。

[code]

    if m_value < np.max(fitness): m_value=np.max(fitness)
    if m_value > np.max(fitness): {fitness.remove(np.min(fitness))
                                  fitness.append(max_value)
                             　　　}
    
[/code]

次のエラーが出てしまいます。  

[code]

    fitness.append(max_value) 　 
    　　 　^ SyntaxError: invalid syntax
    
[/code]

fitnessですが、`fitness = np.array(fit).astype(np.float)` です。  
`fit=[]` となっています。変数の指定が悪いのでしょうか？


CC BY-SA 4.0
2020-03-23T04:42:00.980
64035
2020-04-26T22:00:20.000
2020-03-24T11:05:36.223
19110
38331
question
python
最大値を保存しつつ、リスト内の最小値と入れ替えたい

[code]

    if m_value < np.max(fitness):
                m_value=np.max(fitness)
    
    if m_value > np.max(fitness):
                fitness.remove(np.min(fitness)) 
                fitness.insert(0,m_value)
    
[/code]

でいいと思います。｛｝は不要でした。


CC BY-SA 4.0
2020-03-24T02:29:43.267
64063
2020-03-24T05:29:24.423
2020-03-24T05:29:24.423
26370
38331
64035
answer


[質問者さんの回答](https://ja.stackoverflow.com/a/64063/19110)で `fitness.remove`
ができるということは、`fitness` は NumPy Array ではなく Python の配列になっていそうです。ただ質問文的には NumPy
Array とのことなので、NumPy Array の場合の回答を書きます。

わざわざ削除して挿入してを繰り返すのはやや無駄なので、代わりに代入で済ませます。また、`max` を何回も計算するのは無駄なので 1 回にします。

[code]

    current_max = np.max(fitness)
    if m_value < current_max
        m_value = current_max
    else:
        fitness[np.argmin(fitness)] = current_max
    
[/code]


CC BY-SA 4.0
2020-03-26T15:17:30.297
64137
2020-03-26T15:17:30.297
19110
64035
answer