私は一連の方程式を持っています。また、一連の値と方程式の結果もあります。何かのようなもの:
a + b + c = x
いくつかの割り当ては次のようになります。
1 + 1 + 1 = 3
2 + 3 + 4 = 9
ただし、実際の方程式ははるかに長く、対数などの関数が含まれている場合があります。
ここで、(1) 方程式が特定の値 xx に等しくなり、(2) パラメーターができるだけ変化しないように、特定のセットの結果を変更する必要があります。
方程式を次のように変更することで、これをCSPとして解決できると思いました
(a + ax) + (b + bx) + (c + cx) = xx
ここで、a、b、および c は古い値に対応し、ax、bx、および cx は、対応する古い値に適用する必要がある差です。そして xx は、方程式に求めたい結果です。a、b、c、xa、xb、cx などはすべて整数値であり、xx は常に x から一定の距離内にあることに注意してくださいxx - d < x < xx + d
。
CSP では、a、b、c、および xx は問題の事実として扱われ、ax、bx、cx は計画変数として扱われ、方程式(a + ax) + (b + bx) + (c + cx) = xx
は厳密な制約になります。ax、ab、ac のすべてを最小化することは、ソフト制約になります。ここには計画エンティティは実際にはありません。
global HardSoftScoreHolder scoreHolder;
rule "changeIsBad"
when
DeltaVariable($delta : delta)
then
scoreHolder.addSoftConstraintMatch(kcontext, -Math.abs(delta));
end
rule "equationMustBeEqual"
// No idea?
end
しかし、ここから先に進む方法がわかりません。Optaplanner はこの種の問題に適していますか? 私は整数値しか持っていませんが、すべてPlanningVariable
の s はリストから取得し、インスタンスでなければならないようです。私のモデルは正しいですか?