我正在構(gòu)建一個(gè)具有一組復(fù)雜約束的班次調(diào)度程序,為此我正在使用 CP-SAT 求解器。我有一個(gè)這樣的數(shù)組: num_vals = 3 for n in all_employees: for d in all_timeslots: shifts[(n, d)] = model.NewIntVar(0, num_vals - 1, 'shift_n%id%i' % (n, d))我試圖設(shè)置一個(gè)約束,其中 5 個(gè) IntVar 值的結(jié)果行的乘積始終等于零,所以我使用的是這樣的東西: sq_r = model.NewIntVar(0, 1,'sq_r') for wind in range(0,11): model.AddMultiplicationEquality(sq_r, [shifts[(n, wind)], shifts[(n, wind+1)], shifts[(n, wind+2)], shifts[(n, wind+3)], shifts[(n, wind+4)]])但我收到以下錯(cuò)誤:Check failed: vars.size() == 2 (5 vs. 2) General int_prod not supported yet.*** Check failure stack trace: *** @ 00007FF98D2B8C45 PyInit__pywrapsat @ 00007FF98D2B6F82 PyInit__pywrapsat @ 00007FF98D550E50 PyInit__pywrapsat @ 00007FF98D54D8FF PyInit__pywrapsat....我已經(jīng)檢查了http://google.github.io/or-tools/python/ortools/sat/python/cp_model.html上的文檔以及這里和 github 上的一些示例,但從未找到任何超過 2 個(gè)項(xiàng)目的示例可以在變量列表中找到,盡管文檔顯示以下內(nèi)容:def AddMultiplicationEquality(self, target, variables)Adds target == variables[0] * .. * variables[n]知道可能是什么問題嗎?
1 回答

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
num_vals = 3for n in all_employees: for d in all_timeslots: shifts[(n, d)] = model.NewIntVar(0, num_vals - 1, 'shift_n%id%i' % (n, d)) shifts_is_zero[(n, d)] = model.NewBoolVar('shift_is_zero_n%id%i' % (n, d)) model.Add(shifts[(n, d)] == 0).OnlyEnforceIf(shifts_is_zero[(n, d)]) model.Add(shifts[(n, d)] > 0).OnlyEnforceIf(shifts_is_zero[(n, d)].Not())
然后
for wind in range(0,11): model.AddBoolOr([shifts_is_zero[(n, wind)], shifts_is_zero[(n, wind+1)], shifts_is_zero[(n, wind+2)], shifts_is_zero[(n, wind+3)], shifts_is_zero[(n, wind+4)]])
添加回答
舉報(bào)
0/150
提交
取消