파이썬에서 COIN-OR을 사용하여 선형 프로그래밍 문제를 해결하려고합니다. 나는 모든 작업을 수행했지만 식별 할 수없는 오류가있는 것으로 보입니다. 강제로 시행하려는 제약에 따라 솔루션이 실행 불가능하거나 올바르지 않은 경우가 종종 있습니다. 이진 변수의 값도 ~ 0.1^10 또는 ~ 0.999 .....실행 불가능한 솔루션, Python에서 펄프, COIN-OR 사용
오류를 찾거나 문제를 해결하는 데 도움을주십시오.
나는
- zip 파일 (엑셀의 코드 + 입력 데이터 파일)
- 워드 문서를 부착하고있다. 수학 공식을 위해서
Model1 메인 클래스는 입력을 받아 새로운 출력 파일을 만든 다음 PanelTwo 클래스 메서드가 Distance 행렬과 Njg 행렬을 만듭니다.
이 theLP를 구축하고, 변수 및 제약 조건을 선언하는 LP에게
코드를 해결 MODEL1 클래스의 생성자 메서드에 오류가있는 것 같습니다가 있습니다
M = 100000 * prob.schoolNum
sModel = []
for i in range(prob.schoolNum):
sModel.append(i)
gModel = []
for i in xrange(prob.gradeNum):
gModel.append(i)
Beta = []
for i in xrange(prob.schoolNum):
temp = 0
for j in xrange(prob.gradeNum):
temp = temp + prob.Njg[i][j]
if temp < prob.Nmax:
Beta.append(0)
else:
Beta.append(1)
# x = students of grade g transfer from school i to j
x = LpVariable.matrix("x_igj_", (sModel, gModel, sModel), 0, 1, LpBinary)
y = LpVariable.matrix("status of school", (sModel), 0, 1, LpBinary)
# o = resulting students in grade in school
o = LpVariable.matrix("o", (sModel, gModel), 0, None, LpInteger)
# oHelper = summation of o for all g rades
oHelper = LpVariable.matrix("oH", (gModel), 0, None, LpInteger)
#Njg_Helper = Total students in a particular school
Njg_helper = LpVariable.matrix("NH", (sModel), 0, None, LpInteger)
formulation = LpProblem("School Consolidation Model", LpMinimize)
formulation += lpSum(((prob.Njg[i][g] * x[i][g][j] for j in sModel) for g in gModel) for i in sModel)
for i in sModel:
for j in sModel:
for g in gModel:
formulation += x[i][g][j] * prob.D[i][j] <= prob.d1
for i in sModel:
for j in sModel:
for g in gModel:
formulation += x[i][g][j] <= y[j]
for i in sModel:
for g in gModel:
formulation += lpSum(x[i][g][j] for j in sModel) <= 1 - y[i]
for j in sModel:
formulation += ((lpSum(prob.Njg[j][g] for g in gModel) - prob.Nmax) * (1 - y[j])) <= 0
for i in sModel:
for j in sModel:
if i != j and Beta[i] * Beta[j] != 1:
formulation += (prob.D[i][j] - prob.d2) >= (y[i] + y[j] - 2) * M
for g in gModel:
formulation += lpSum(o[j][g] for j in sModel) == oHelper[g]
formulation += lpSum(prob.Njg[i][g] for i in sModel) == oHelper[g]
for j1 in sModel:
formulation += lpSum(prob.Njg[i1][g]*x[i1][g][j1] for i1 in sModel) == o[j1][g]-prob.Njg[j1][g]*y[j1]
formulation.solve()
당신은 당신이 아니라 zip 파일에 링크보다, 질문 자체에 오류를 발견하고 코드를 복사 할 경우 더 유용한 정보를 얻을 가능성이있어. – bouteillebleu
조언 해 주셔서 감사합니다. 몇 가지 해결책을 얻을 수 있습니까? – Ujjawal107