【发布时间】:2014-02-05 23:41:52
【问题描述】:
我有一组方程式。我还有一组值和方程的结果。 比如:
a + b + c = x
有些分配可能是:
1 + 1 + 1 = 3
2 + 3 + 4 = 9
但是,实际的方程要长得多,并且可能包含一些函数,例如对数。
我现在需要改变给定集合的结果,使 (1) 方程变为等于特定值 xx 和 (2) 参数变化尽可能小。
我认为我可以通过将 eqation 更改为 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 对于这类问题是否可行?似乎所有PlanningVariables 都必须来自一个列表并且必须是实例,而我只有整数值。我的模型正确吗?
【问题讨论】:
-
线性规划方法可能更简单。你考虑过吗?
-
我不认为线性规划是可行的,因为方程不一定是线性的。
标签: constraint-programming optaplanner