0

いくつかの最適化問題では、scipys 最適化ツールボックスの微分進化を使用しています。プロセスを高速化するために複数の CPU を使用したいのですが、目的関数にいくつかの追加の引数を渡したいと考えています。ただし、これらは単なるスカラーではなく、モデルを評価するための最適化に必要なデータセットです。

通常の方法で引数を目的関数に直接渡そうとすると、Python は目的関数が選択できないと文句を言います。データを辞書に入れて目的関数に渡すと、python は「 File "/usr/lib64/python3.6/multiprocessing/connection.py"、393 行目、_send_bytes header = struct.pack(" !i", n) struct.error: 'i' 形式には -2147483648 <= 数値 <= 2147483647 が必要です"

複数のワーカーを使用する場合、どうすれば微分進化の目的関数に重要なデータを渡すことができますか? 私はまだ方法を見つけていません。

何かのようなもの

par02 = {'a':2,'b':3, "data":train_data}

# Define optimization bounds.
bounds = [(0, 10), (0, 10)]

# Attempt to optimize in series.
# series_result = differential_evolution(rosenbrock, bounds, args=(par02,))
# print(series_result.x)

# Attempt to optimize in parallel.
parallel_result = differential_evolution(rosenbrock, bounds, args=(par02,),
                                         updating='deferred', workers=-1)

たとえば、機能しません。

誰でもアイデアを得ましたか?それとも、目的関数が呼び出されるたびにディスクからデータをロードする必要がありますか? それは最適化をかなり遅くするでしょう。

4

1 に答える 1