新製品の需要を見積もりたいと思います。顧客はエージェントです。各製品には、購入に基づいて最適化する必要がある3つの変数があります。売上を最大化する最適な変数を見つけるために、私はローカル最適化アルゴリズム、勾配降下を使用しました。次のように動作します。Netlogoローカル最適化
1.重量、サイズ、価格の初期値が定義されています。 2.検索手順が開始されます。 dgradientは目的関数の勾配の標準です。 dxは変数と新しい変数の差を計算しました。
while [dgradient > 0.00001 and numiter < 1000 and dxw > 0.00001 and dxs > 0.00001 and dxp > 0.00001]
set weightnw weight - stepsize * (the gradient)
set sizenw size - stepsize * (the gradient)
setpricenw price - stepsize * (the gradient)
検索プロシージャは、近隣に新しい変数を生成しますが、範囲内にあることを確認する必要があります。だから私は、彼らが範囲内にあることを確認するために、このwhileループを定義した:
while [not(((weightnw <= 400) and (weightnw >= 100)) and ((sizenw >= 5) and sizenw <= 20)) and ((pricenw >= 20) and (pricenw <=90)))]
set stepsize stepsize - 0.0001
set weightnw weight - stepsize * (the gradient)
set sizenw size - stepsize * (the gradient)
setpricenw price - stepsize * (the gradient)
そして、目的関数が計算され、新たな変数と目的関数の値が比較されます。
手順は意味がありますか?
おかげ
グラジエントはどのように計算されますか?ちょうど再起動やそのような検索アルゴリズムで山登りを使用するのはなぜですか? http://ccl.northwestern.edu/netlogo/models/community/gradient – mattsap
を参照してください。また、発生している問題は何ですか?期待値はオフですか?私はあなたがグローバルではなくローカルの最小値/最大値を見つけるかもしれないと思うが、表示されていない残りのコードに本当に依存する。 – mattsap