ORtools でグラフの色付けを解決する cp 関数を書きました
(エッジ上の 2 つの頂点ごとに異なる色を使用する必要がある場合は、色の使用を最小限に抑えます) 奇妙な結果が得られますが、これは最適ではなく、理由がわかりません。目的関数が間違っているか、制約の定式化が間違っていると思います。 ? ありがとう
def cp_with_ortools(node_count, edge_count, edges, M, solution, max_degree):
global colors
from ortools.sat.python import cp_model
solution = [0] * (node_count)# list of colors to nodes initialized with 0
# Creates the model.
model = cp_model.CpModel()
# Creates the variables.
for i in range(node_count):
solution[i] = model.NewIntVar(0, int(node_count), '')
#shouldnt be max_degree? isnt working..
# Adds constraint
for edge in edges:
model.Add(solution[edge[0]] != solution[edge[1]])
# Create the objective function
obj_var = model.NewIntVar(0, node_count, 'makespan')
model.AddMaxEquality(obj_var,solution)
model.Minimize(obj_var)
#model.Minimize(len(set(solution)))
#model.Minimize(sum(solution)))
# Creates a solver and solves the model.
solver = cp_model.CpSolver()
status = solver.Solve(model)
if status == cp_model.OPTIMAL:
colors = [solver.Value(solution[i]) for i in range(node_count)]
return colors