問題タブ [differential-evolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 数千のパラメータで差分進化アルゴリズムを高速化
Python で多くのパラメータ (37 から 1099 まで) を使用して、集中降雨流出バランス モデルを作成しようとしています。入力として、毎日の降雨量と気温のデータを受け取り、毎日のフローとして出力を提供します。
モデルのキャリブレーションの最適化方法に行き詰まっています。使いやすく、このような問題に適用できる差分進化アルゴリズムを選択しました。私が書いたアルゴリズムはうまく機能し、目的関数 (Nash-Sutcliff モデルの効率 - NSE) を最小化するようです。問題は、アルゴリズム全体を大幅に遅くするパラメーターの数が多いことから始まります。私が書いた DE アルゴリズム:
降雨流出モデル自体は、基本的にリストで機能する関数であり、 for ループを介して各行を反復処理し、単純な方程式で毎日の流れを計算します。目的関数 NSE は、numpy 配列によってベクトル化されます。
それをスピードアップする機会はありますか?「Pythonコードをマシンコードにコンパイルする」numbaライブラリについて知り、CPUでより効率的に計算したり、CUDAコアを使用してGPUで計算したりできます。しかし、私はITに関することは何も勉強しておらず、CPU/GPUがどのように機能するかをまったく知らないため、numbaを適切に使用する方法がわかりません。誰でも私を助けることができますか?または、誰かが別の最適化方法を提案できますか?
私が使用するもの: Python 3.7.0 64 ビット、Windows 10 Home x64、Intel Core(TM) i7-7700HQ CPU @ 2.80 Ghz、NVIDIA GeForce GTX 1050 Ti 4GB GDDR5、16 GB RAM DDR4。
私は水管理を研究している Python の初心者であり、データ処理での生活を楽にするためにいくつかのスクリプトに Python を使用することがあります。よろしくお願いいたします。
python - 複数のワーカーを使用した scipy 差分進化の目的関数に引数を渡す
いくつかの最適化問題では、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 が必要です"
複数のワーカーを使用する場合、どうすれば微分進化の目的関数に重要なデータを渡すことができますか? 私はまだ方法を見つけていません。
何かのようなもの
たとえば、機能しません。
誰でもアイデアを得ましたか?それとも、目的関数が呼び出されるたびにディスクからデータをロードする必要がありますか? それは最適化をかなり遅くするでしょう。