注文書を最適化するためのモデルを作成しています。
注文する金額は500以上でゼロ以上である必要があります。
ソルバーでこのような制約を定義するにはどうすればよいですか?
バイナリ制約を試し、いくつかの異なる数式も試しましたが、何も機能しないようです。
基本的に、ソルバーでOR
を表現できる必要がありますが、どうすればよいですか?
編集:次のリンクで、私が使用しているExcelファイルが表示される場合があります: ここをクリック
つまり、0は許可され、1は許可されず、499は許可されず、501は許可されますか?隣接していない領域のように見えます。したがって、これは純粋な最適化問題ではなく、一種の組み合わせ問題でもあります。ソルバーはこれを処理できないのではないかと思います。
2つのユースケースを別々に分析する必要があります。
次に、IF式を使用してこれら2つのケースを比較します。
編集:
Karlが提案したように、「バイナリ」制約と「整数」制約を使用しようとしましたが、機能しませんでした。
すべての場合において、結果はしばしば間違っていて、初期条件に依存していました。どうやらソルバーはそのようなものが好きではありません。
次に、上記の提案を6つの購入値すべてに適用し、たとえば、すべての月のコストの合計を最適化することによって、それらを個別に最適化することを検討しました。しかし、それらは独立していないことが判明しました。開始在庫は前月に依存し、1か月の最適な購入は、前月に購入されたかどうかによって異なります。したがって、単純なIFを毎月追加することはできません。
私にできる最善のことは次のとおりです。
バイナリ変数0-1と連続変数> = 500を追加し、IFを使用して毎月の購入を計算しました。しかし、ソルバーを使用して連続変数のみを最適化しました。バイナリ変数はパラメータです。つまり、購入が行われる月を選択し、ソルバーを使用してこれらの購入の値を計算し、結果の総コストを記録します。
これは、購入と非購入のすべての組み合わせに対して繰り返す必要があります。これらの組み合わせの数は2です6= 64。しかし実際には、1月に何も購入しないと、許可されていないマイナスの最終在庫になってしまいます。したがって、有効な組み合わせは32個だけです。組み合わせインデックスからバイナリ値を計算する式を追加し、インデックスを32回繰り返し、毎回手動でソルバーを起動し、各組み合わせの結果を「値としてのみ」コピーしました。
その結果、最小コストは4 625,00€であり、この値に達するには2つの組み合わせがあります。
これは、ソルバーのスクリーンショットとともにGoogleドキュメントにアップロードされたファイルです。
ソルバーを手動で複数回起動するのは面倒ですが、マクロを使用して自動化できると思います。