我有一组方程。我还有一组值和方程的结果。就像是:
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 都必须来自 List 并且必须是实例,而我只有整数值。我的模型正确吗?