代码之家  ›  专栏  ›  技术社区  ›  Vibeeshan Mahadeva

或工具:根据给定范围限制组合

  •  1
  • Vibeeshan Mahadeva  · 技术社区  · 7 年前

    我正在创建一个简单的解算器应用程序。你可以查看下面的代码。

    现在,我想将作为解决方案创建的组合限制为一定数量。(例如:最多1000个)。因为解算器使用步长值1作为默认值。输入 2 对于 numberOfItems 结果是101。但如果我 项目数 3 总解决方案将超过5000,如果 项目数 4 总解决方案将超过10000个。

    如何构建能够根据输入更改步长值的解算器。在不影响分配的情况下。

    int totalCumilation = 100; //adding values of all item should equal to this. User might give 100 to 100000 
    int numberOfItems = 3; //User might give 2..25
    
    Solver solver = new Solver("MY_CP");
    
    IntVar[] weights = solver.makeIntVarArray(numberOfItems, 0, totalCumilation, "weights");
    
    solver.addConstraint(solver.makeEquality(solver.makeSum(weights), totalCumilation));
    
    DecisionBuilder decisionBuilder = solver.makeDefaultPhase(weights);
    solver.solve(decisionBuilder);
    
    while (solver.nextSolution()) {
        for (int i = 0; i < weights.length; i++) {
            System.out.println(weights[i]);
        }
        System.out.println("");
    
    }
    
    System.out.println("Finished");
    

    我在代码中还提到了一些约束条件。一旦传播出最佳解决方案(如1000项)。我将探索(放大)更多的解决方案(在应用这些约束之后,5000个生成的项目可能会变成3000个,我们将只展示其中的1000个)。

    0 回复  |  直到 7 年前