代码之家  ›  专栏  ›  技术社区  ›  MrKhonsu

在谷歌或工具中保持变量出现的计数

  •  0
  • MrKhonsu  · 技术社区  · 1 年前

    我在玩OR Tools,只是想知道是否有任何方法可以保持某个约束满足的次数?

    在这种情况下,我想记录我的“diff”变量为-1、-2、0、2等的次数。

    我已经从官方文档中获得了解决方案打印机,所以我是否也必须以任何方式编辑/调整它才能返回计数?

    提前谢谢,我是新手。

    from ortools.sat.python import cp_model
    model = cp_model.CpModel()
    x = model.NewIntVar(0, 10, 'x')
    y = model.NewIntVar(0, 10, 'y')
    diff = model.NewIntVar(-10,10,'diff')
    model.Add(diff == x - y)
    #occurences of each diff
    
    #solution printer
    class VarArraySolutionPrinter(cp_model.CpSolverSolutionCallback):
        """Print intermediate solutions."""
    
        def __init__(self, variables):
            cp_model.CpSolverSolutionCallback.__init__(self)
            self.__variables = variables
            self.__solution_count = 0
    
        def on_solution_callback(self):
            self.__solution_count += 1
            for v in self.__variables:
                print(f"{v}={self.Value(v)}", end=" ")
            print()
    
        def solution_count(self):
            return self.__solution_count
    
    solver = cp_model.CpSolver()
    # solver.parameters.log_search_progress = True
    solution_printer = VarArraySolutionPrinter([x, y, diff])
    solver.parameters.enumerate_all_solutions = True
    status = solver.Solve(model, solution_printer)
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Laurent Perron    1 年前

    为什么不在on_saolution_callback()方法中增加一个计数器呢?