问题:
在示例中 - CloudBalancing,为什么此应用程序无法访问solver.getBestSolution()
?该应用程序始终在solver.solve(unsolvedCloudBalance);
运行。
有什么建议吗?
此处的一些可行解决方案是在solver.solve(unsolvedCloudBalance);
完成,然后获取solver.getBestSolution()
?
/*
* Copyright 2012 JBoss Inc
*
......
*/
......
public class CloudBalancingHelloWorld {
public static void main(String[] args) {
// Build the Solver
SolverFactory solverFactory = SolverFactory.createFromXmlResource(
"org/optaplanner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml");
Solver solver = solverFactory.buildSolver();
// Load a problem with 2 computers and 6 processes
CloudBalance unsolvedCloudBalance = new CloudBalancingGenerator().createCloudBalance(2, 6);
// Solve the problem
System.out.println("Test - solver - before");
solver.solve(unsolvedCloudBalance);
System.out.println("Test - solver - after");
// Display the result
CloudBalance solvedCloudBalance = (CloudBalance) solver.getBestSolution();
System.out.println("\nSolved cloudBalance with 2 computers and 6 processes:\n"
+ toDisplayString(solvedCloudBalance));
}
public static String toDisplayString(CloudBalance cloudBalance) {
StringBuilder displayString = new StringBuilder();
for (CloudProcess process : cloudBalance.getProcessList()) {
CloudComputer computer = process.getComputer();
displayString.append(" ").append(process.getLabel()).append(" -> ")
.append(computer == null ? null : computer.getLabel()).append("\n");
}
return displayString.toString();
}
}
答案 0 :(得分:2)
我假设您没有编辑示例的Solver配置XML文件。
如果您查看正在加载Solver configuration from的XML文件,则它没有终止子句。基本上,你告诉Solver要永远奔跑。
您可以编辑解算器配置XML文件,让它在给定条件后终止。有关如何执行此操作,请参阅the documentation。
如果您想以编程方式执行此操作,请查看JavaDoc:SolverConfig类的SolverConfig#setTerminationConfig method和TerminationConfig class。加载XML文件后,您需要编辑SolverFactory的SolverConfig:请参阅SolverFactory#getSolverConfig方法。
答案 1 :(得分:2)
非常感谢oskopek,按照你的建议解决了这个问题。
您的建议是:
您可以编辑解算器配置XML文件,让它在给定条件后终止。请参阅有关如何执行此操作的文档。
我做的是:
修改cloudBalancingSolverConfig.xml
,使用如下的终止。然后应用程序在运行120秒后退出。
<termination>
<secondsSpentLimit>120</secondsSpentLimit>
</termination>
以下是2台计算机和6个进程的应用程序输出:
09:57:24.791 [main] INFO o.d.c.k.b.impl.KieRepositoryImpl - KieModule was added: MemoryKieModule[releaseId=org.default:artifact:1.0.0-SNAPSHOT]
09:57:24.963 [main] DEBUG o.drools.core.impl.KnowledgeBaseImpl - Starting Engine in PHREAK mode
Test - solver - before
09:57:25.182 [main] INFO o.o.core.impl.solver.DefaultSolver - Solving started: time spent (110), best score (uninitialized/0hard/0soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
09:57:25.213 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (0), time spent (141), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@34abdee4 => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.228 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (1), time spent (156), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@1494b84d => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.228 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (2), time spent (156), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@655a5d9c => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.244 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (3), time spent (172), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@1b5bc39d => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.244 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (4), time spent (172), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@bc57b40 => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.260 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (5), time spent (188), score (0hard/-6000soft), selected move count (2), picked move (com.optaplanner.cloudbalancing.domain.CloudProcess@21362712 => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:57:25.260 [main] INFO o.o.c.i.c.DefaultConstructionHeuristicPhase - Construction Heuristic phase (0) ended: step total (6), time spent (188), best score (0hard/-6000soft).
09:57:25.712 [main] DEBUG o.o.c.i.l.DefaultLocalSearchPhase - LS step (0), time spent (640), score (0hard/-8000soft), best score (0hard/-6000soft), accepted/selected move count (1000/1000), picked move ([com.optaplanner.cloudbalancing.domain.CloudProcess@2575f671, com.optaplanner.cloudbalancing.domain.CloudProcess@72bca894, com.optaplanner.cloudbalancing.domain.CloudProcess@503d56b5, com.optaplanner.cloudbalancing.domain.CloudProcess@433ffad1, com.optaplanner.cloudbalancing.domain.CloudProcess@1fc793c2, com.optaplanner.cloudbalancing.domain.CloudProcess@324dcd31] => com.optaplanner.cloudbalancing.domain.CloudComputer@758f4f03).
09:59:25.083 [main] DEBUG o.o.c.i.l.DefaultLocalSearchPhase - LS step (1), time spent (120011), score (0hard/-6000soft), best score (0hard/-6000soft), accepted/selected move count (0/10162968), picked move ([com.optaplanner.cloudbalancing.domain.CloudProcess@503d56b5, com.optaplanner.cloudbalancing.domain.CloudProcess@72bca894, com.optaplanner.cloudbalancing.domain.CloudProcess@324dcd31, com.optaplanner.cloudbalancing.domain.CloudProcess@433ffad1, com.optaplanner.cloudbalancing.domain.CloudProcess@2575f671, com.optaplanner.cloudbalancing.domain.CloudProcess@1fc793c2] => com.optaplanner.cloudbalancing.domain.CloudComputer@1f130eaf).
09:59:25.083 [main] INFO o.o.c.i.l.DefaultLocalSearchPhase - Local Search phase (1) ended: step total (2), time spent (120011), best score (0hard/-6000soft).
09:59:25.083 [main] INFO o.o.core.impl.solver.DefaultSolver - Solving ended: time spent (120011), best score (0hard/-6000soft), average calculate count per second (84692), environment mode (REPRODUCIBLE).
Test - solver - after
Solved cloudBalance with 2 computers and 6 processes: