我有一个航空公司的问题,我有一个座位,它被分配一个乘客基于偏好和重量(基本上是出价)。我希望最高出价的顶级乘客被分配到他们的座位奖励。查看日志,它看起来像求解程序正在执行“接受/选择移动”的类似乘客与类似的出价,我希望它选择乘客与不同的出价。
我想接受一个移动对不同的出价不同的席位和探索更广阔的空间。
我找不到任何关于如何编写Move或Acceptor以及如何让SpringBoot使用这个新类的示例。但也许我只是缺少了一个设置。谢谢
我有一个航空公司的问题,我有一个座位,它被分配一个乘客基于偏好和重量(基本上是出价)。我希望最高出价的顶级乘客被分配到他们的座位奖励。查看日志,它看起来像求解程序正在执行“接受/选择移动”的类似乘客与类似的出价,我希望它选择乘客与不同的出价。
我想接受一个移动对不同的出价不同的席位和探索更广阔的空间。
我找不到任何关于如何编写Move或Acceptor以及如何让SpringBoot使用这个新类的示例。但也许我只是缺少了一个设置。谢谢
1条答案
按热度按时间k5ifujac1#
添加一个特定的移动选择器可以帮助解决这个问题。这可以是一个通用移动(如柱子交换)或自定义移动。没有必要更改
Acceptor
。我假设你有一个硬约束来保持家庭在一起(=坐在彼此旁边),特别是一个蹒跚学步的孩子和他们的父母。如果你打开TRACE日志记录(不仅仅是DEBUG),你会看到它确实评估改变蹒跚学步的孩子座位的动作,但它从来没有选择他们作为胜利的一步,因为这个硬约束(父母没有在同一个动作中改变座位)。
所以诀窍就是要有一个动作,让蹒跚学步的孩子和它的父母一起移动。
添加一个
src/main/resources/solverConfig.xml
文件(位置可以用application.properties
中的optaplanner.solver-config-xml
自定义。让它包含如下内容:总是保持一个变化和交换移动选择器在混合太。保持你的分数计算速度(最后信息日志消息)在这些变化之前和之后的眼睛。阅读JUST_IN_TIME选择。