Pyomo:无法处理二次表达式,护士-患者分配模型中的语言匹配约束



我正在编写一个护士-患者匹配算法,我想在目标函数中加入一些东西,以鼓励护士和患者之间的语言匹配。目标是将每位患者分配给一名护士,同时最大限度地减少不均衡的工作量分布、房间之间的距离、护理的连续性、语言匹配等。为了简单起见,我只展示了语言匹配元素。

model.PatientIDs  = {0, 1, 2}
model.NurseIDs = {a, b}

Patient Language-索引参数(按患者索引(

model.PATIENT_LANGUAGE = {(0: English), (1: Spanish), (2: English)}

护士语言-索引参数(由护士索引(

model.NURSE_LANGUAGE = {(a: English), (b: Spanish)}

索引参数(按患者、护士索引(-跟踪护士语言是否与患者语言匹配,根据患者语言和护士语言预先计算

model.LANGUAGES_MATCH = {(0, a): 1, (0, b): 0, (1, a) : 0, (1, b) : 1, (2, a) : 1, (2, b) : 0}

决策变量(由(患者、护士(索引(

model.ASSIGNMENTS = {(0, a): 0, (0, b): 1, (1, a) : 1, (1, b) : 1, (2, a) : 0, (2, b) : 0}

虚拟决策变量(由(患者、护士(索引(

model.DUMMY_LANGUAGE = {(0, a): 1, (0, b): 0, (1, a) : 0, (1, b) : 1, (2, a) : 1, (2, b) : 0}

这就是我构建的约束:

def matches_language(self, patient, nurse): # LANGUAGE
return model.LANGUAGE_DUMMY[patient, nurse] <= model.ASSIGNMENTS[patient, nurse] * model.LANGUAGE_MATCH[patient, nurse]
model.LANG_MATCH = pe.Constraint(model.P, model.N, rule = matches_language)

因此,ASSIGNMENTS(p1,n1(充当了我们是否需要关心p1和n1是否具有匹配语言的选择器。我在目标函数中最大化lang_match,这反过来也应该最大化约束的RHS,从而促进语言匹配的分配。然而,我得到了这个错误:

ValueError: Solver unable to handle quadratic expressions. Constraint at issue: 'LANG_MATCH[1]'

我不认为这会是二次的,因为模型。LANGUAGES_MATCH是一个参数(用标量填充(,而不是一个变量。有人能帮我理解为什么会出现这个错误吗?

从伪代码和代码的混合来看,这里发生了什么并不清楚。但如果你已经计算出一些";奖励积分";用于匹配患者CCD_ 1和护士CCD_。(旁白:你可以随心所欲地制作这个查找表……但这与pyomo是分开的(

所以,你有这个积分表,比如:{(n1, p1): 0, (n1, p2): 5, ...}

如果你有一个决策变量x[n, p],那么你不需要任何约束或伪变量,只需要让它成为目标函数的一个组成部分。

obj = <some other stuff> + w * sum(m.x[n, p] * m.language_bonus[n, p] for n in N for p in P)

其中CCD_ 6是该分数相对于其余部分可能需要的部分权重。

你可能会得到";二次型";警告,因为您正在将变量相乘,这是不必要的。

最新更新