問題タブ [or-tools]
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.
java - OR-Tools: 与えられた範囲に対して組み合わせを制限する
簡単なソルバー アプリケーションを作成しています。以下のコードを確認できます。
ここで、ソリューションとして作成される組み合わせを特定の数に制限したいと考えています。(例: 最大 1000)。ソルバーはデフォルトでステップ値 1 を使用するためです。101 の結果を入力2
します。ただし、ソリューションを合計すると5000 を超え、ソリューションの合計が 10000 を超えます。numberOfItems
numberOfItems
3
numberOfItems
4
入力に応じてステップ値を変更できるソルバーを構築する方法。配布に妥協することなく。
コードで共有していることに注意した制約がいくつかあります。最適なソリューションが伝播されると (例: 1000 アイテム)。いくつかの解決策を検討 (ズーム) します (これらの制約を適用した後、5000 の生成されたアイテムが 3000 になる可能性があり、そのうちの 1000 のみが表示されます)。
algorithm - 線形計画法: 複数の変数を一度に最大化する目的を定式化できますか?
次のシステムで示されるいくつかの変数と制約があるとしましょう:
灰色の線は、その上の範囲によって指定された量だけ伸縮できます。青い線は単なる終点であり、灰色の線がどのように相互作用するかを示しています。
私の目標:線形計画法を使用して、図のように灰色の線のサイズを均等に最大化したいと考えています。バネが付いた灰色の線がすべて均等に外側に押し出されていることが想像できます。悪い解決策は、すべての青い線をできるだけ片側に寄せることです。この説明には少し余裕があり、複数の解決策が可能であることに注意してください。必要なのは、それらが合理的に均等であり、1 つの値が他のすべてを押しつぶしてしまうような最大値にならないようにすることだけです。
私が試した目的関数は、単純に行のサイズの合計を最大化します。
項が相殺され、ある行の増加は別の行のそれを同じ量だけ減少させるため、これが良い解決策ではないことは私には明らかです。
また、各線の距離を中間の可能な範囲から最小限に抑えようとしました。lineB - A
の場合、その範囲の中央値(1,3)
は です2
。最初の項の目的は次のとおりです。
絶対値を実装するために、用語を次のように置き換え、U
追加の制約を追加しました。
これには他の目的と同じ問題があります。差は常に別の線の差の変化に比例します。差を2乗できればうまくいくと思いますが、線形ソルバーでは入力できません。
私が求めているものを達成する目的関数はありますか、それとも線形ソルバーはこれに適したツールではありませんか?
役立つ場合は、Google OR-Tools を使用しています。
ここに書き出された制約があります: