Unbdray不给我正确的答案
正在进行的你好,
我试图解决一个问题在两个方面有和没有弯管机分解。提取unbdrays并将它们添加到我的主人问题,但当我把他们提取到(w) (d-Bx) = < 0是不工作,给了我一个错误。我将非常感激,如果你在这方面帮助我。
def solve_Dual_subproblem (z):
#定义所有变量
Dualproblem = grb.Model ()
# Dualproblem。setParam (LogToConsole, 0)
sumpc = Dualproblem.addVars (Tx vtype = ' c '磅= 0)#和通道
powerupperbound = Dualproblem.addVars (Tx,射程(numChannels), vtype = ' c '磅= 0)# upperbound功率变量
qdef = Dualproblem.addVars (Tx、处方、范围(numChannels) vtype = ' c '磅= -grb.GRB。无穷,乌兰巴托= grb.GRB.INFINITY) # qdef
qsens = Dualproblem.addVars (Tx、处方、范围(numChannels) vtype = ' c '磅= 0)# qsens
qint = Dualproblem.addVars (Tx、处方、范围(numChannels) vtype = ' c '磅= 0)# qint
qsnr = Dualproblem.addVars (Tx、处方、范围(numChannels) vtype = ' c '磅= 0)# qsnr
#定义所有的约束
#约束(0)
油底壳= []
我的列表(范围(numDevices)):
n的范围(numChannels):
lh = - sumpc[我]——powerupperbound [n]我-总和(dist (i, j) * qdef j (i, j n)的列表(范围(numDevices)))
rhs = 1
sump.append (Dualproblem。addConstr (lh < = rhs, name =“池”))
#约束(1)
sumq = []
我的列表(范围(numDevices)):
j的列表(范围(numDevices)):
n的范围(numChannels):
lh = qdef [i, j n] + qsens (i, j n) -(总和(qint k (k, j, n)在列表(范围(numDevices)))——qint [i, j n]) + qsnr (i, j n) -δ*(和(qsnr k (k, j, n)在列表(范围(numDevices)))——qsnr [i, j n])
rhs = 0
sumq.append (Dualproblem。addConstr (lh = =, name = ' sumq '))
expr =总和(-Pmax_radio * sumpc[我]我的列表(范围(numDevices))) +总和(-Pmax_channel *总和(z (i, j n) j Rx) * powerupperbound [n]我因为我在列表(范围(numDevices)) n的范围(numChannels)) +总和(Psense * z (i, j n) * qsens [i, j n]我的列表(范围(numDevices)) j的列表(范围(numDevices)) n的范围(numChannels)) +总和((-Pinterfere - (1 - z (i, j n)) * M) * qint (i, j n)因为我列表(范围(numDevices)) j的列表(范围(numDevices)) n的范围(numChannels)) +总和((δ*γM * (1 - z (i, j n))) * qsnr (i, j n)因为我列表(范围(numDevices)) j的列表(范围(numDevices)) n的范围(numChannels))
Dualproblem.setObjective (= grb.GRB.MAXIMIZE, expr = (expr))
Dualproblem。setParam (' InfUnbdInfo ', 1) #的可行性
Dualproblem.setParam(“方法”,0)#对偶单纯形法
Dualproblem.update ()
Dualproblem.optimize ()
#打印(Dualproblem.display ())
打印(Dualproblem.status, Dualproblem.status)
打印(“Dualproblem。Dualproblem.ObjVal ObjVal = ')
如果Dualproblem.status = = grb.GRB.UNBOUNDED:
#打印(“在”,Dualproblem.getConstrByName (sumq) .getAttr (“FarkasDual”))
dualsp = Dualproblem。getAttr (UnbdRay, Dualproblem.getVars ())
sumpc_sol = Dualproblem。getAttr (UnbdRay, sumpc)
dual_sumpc = np.array ([sumpc_sol [(i)]我的范围(numDevices)))
powerupperbound_sol = Dualproblem。getAttr (UnbdRay, powerupperbound)
dual_powerupperbound = np.array ([powerupperbound_sol [(i), n]我的范围(numDevices) n范围(numChannels)))
qdef_sol = Dualproblem。getAttr (UnbdRay, qdef)
dual_qdef = np.array ([qdef_sol[(我),(j), n]我在范围(numDevices) j范围(numDevices) n范围(numChannels)))
qsens_sol = Dualproblem。getAttr (UnbdRay, qsens)
dual_qsens = np.array ([qsens_sol[(我),(j), n]我在范围(numDevices) j范围(numDevices) n范围(numChannels)))
qint_sol = Dualproblem。getAttr (UnbdRay, qint)
dual_qint = np.array ([qint_sol[(我),(j), n]我在范围(numDevices) j范围(numDevices) n范围(numChannels)))
qsnr_sol = Dualproblem。getAttr (UnbdRay, qsnr)
dual_qsnr = np.array ([qsnr_sol[(我),(j), n]我在范围(numDevices) j范围(numDevices) n范围(numChannels)))
返回dual_sumpc、dual_powerupperbound dual_qdef、dual_qsens dual_qint, dual_qsnr, Dualproblem.status dualsp
α=总和(Pmax_radio * dual_sumpc[我]我的范围(numDevices)) +总和((Pinterfere + M) * dual_qint (i, j n)因为我范围的j (numDevices)范围(numDevices) n的范围(numChannels)) +总和(((δ*γ)- M) * dual_qsnr (i, j n)因为我范围的j (numDevices)范围(numDevices) n的范围(numChannels))
beta_z = np.zeros ((numDevices, numDevices numChannels))
j的范围(numDevices):
n的范围(numChannels):
因为我在范围(numDevices):
beta_z (i, j n) = Pmax_channel * dual_powerupperbound [n]我+ Psense * dual_qsens (i, j n) - M * dual_qint (i, j n) + M * dual_qsnr (i, j n)
# beta_z (i, j n) = Pmax_channel * dual_powerupperbound [n]我+ (Psense * dual_qsens (i, j n) - m * dual_qint [i, j n])
#检查的正确性
#检查子问题状态和增加削减
cutname =“削减”+ str (outeriter)
如果dual_feas = = 5: #不可行子&无界的对偶问题
的主人。addConstr(α+总和(beta_z (i, j n) * z[(我),(j), n]我在范围(numDevices) j范围(numDevices) n范围(numChannels)) < = 0,名称=“有限元”+ str (outeriter))
-
你好,萨拉。究竟出了什么错误,提高当您尝试添加的可行性?
0 -
嗨,史蒂文,
错误无法检索属性的ObjVal主问题,当我看到.lp结果因为我添加的可行性降低是不可行的。(Z是一个积极的价值)
feas1: 2.704 z z (8 0 0) + 2.704 (8,0, - 1) + 2.704 z z (8 0 2) + 2.704 (8 0 3)
+ 3.364 z (8、2、4) < = -100
请登录留下你的评论。
评论
2的评论