我正在处理optaplanner的优化问题。我觉得我没有正确地设计我的计划实体或变量。也许有人会说他们对以下案例的看法:
实体:原则上,这是一个相当简单的问题。有许多仓库只储存一种产品,可以接收产品或在指定的运输路线上供应其他仓库。我们称之为节点。
class Node
int upperBoundary
int lowerBoundary
int items
String name
每条运输路线可以运输所有产品。你可以把问题想象成一个矩阵或一棵树。我将矩阵的单元定义为规划实体。计划变量是单元格上的整数值。我们称之为加权边。在我的解题课上 List<Edge> edges.
```
E1 E2 E3 ... En
N1 1 0 0 2
N2 3 1 3 1
N3 0 1 0 0
...
Nn 1 1 0 0
@PlanningEntity
class WeightedEdge
Node from
Node to
@PlanningVariable
Integer items (nullable)
int minCapacity
int maxCapacity
在我的例子中,我现在有大约450个加权边。它们都有最小值和最大值。这些是正确识别的。
Node a min 0 max 40
Node b min 0 max 20 uws.
如果我现在运行一个基准测试,它会精确地将各个节点的数量范围之和显示为“问题规模”。在上面的例子中是60。
但问题是,规划变量具有依赖性。因此,我是否为a输入39,为b输入20是有区别的。或者a是38,b是20。这给了我800个可能性。有人知道这种结构的设计错误在哪里吗?
评分功能的目的是平衡节点,使计划期过后节点的项目数量介于上下限之间。为此,我正在使用constraintprovider。
softscore=通过整个网络在每个站点上对多个或对少个项目的总和
---编辑---
按照建议,我将环境模式更改为full\ u assert。使用此配置,解算器将抛出一个错误:
在这种模式下,它会抛出一个错误。我的移动已损坏:
Caused by: java.lang.IllegalStateException: UndoMove corruption (1soft): the beforeMoveScore (-65init/0hard/0medium/-2412soft) is not the undoScore (-65init/0hard/0medium/-2411soft) which is the uncorruptedScore (-65init/0hard/0medium/-2411soft) of the workingSolution.
- Enable EnvironmentMode FULL_ASSERT (if you haven't already) to fail-faster in case there's a score corruption or variable listener corruption.
- Check the Move.createUndoMove(...) method of the moveClass (class org.optaplanner.core.impl.heuristic.selector.move.generic.ChangeMove). The move (0 items -> 3 items) might have a corrupted undoMove (Undo(0 items -> 3 items)).
- Check your custom VariableListeners (if you have any) for shadow variables that are used by score constraints that could cause the scoreDifference (1soft).
at org.optaplanner.core.impl.score.director.AbstractScoreDirector.assertExpectedUndoMoveScore(AbstractScoreDirector.java:670)
at org.optaplanner.core.impl.heuristic.thread.MoveThreadRunner.run(MoveThreadRunner.java:149)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
... 4 more
---编辑2:得分随时间变化图---
![](https://i.stack.imgur.com/3F9lG.png)
---编辑3:内存消耗图---
![](https://i.stack.imgur.com/y5ggc.png)
暂无答案!
目前还没有任何答案,快来回答吧!