0
나는 알려진 것으로 알려진 혼합 정수 선형 프로그래밍 공식을 구현 중입니다. 그러나 제약 중 하나는 목적 함수를 첨가하면된다 :합리적인 제약 조건이 추가되면 Python 펄프 MILP 목표가 무효화됩니다.
from pulp import *
words = ['close', 'near', 'intimate']
pairs = [u + '-' + v for u in words for v in words if u != v]
scores = {'close-intimate': 2.0,
'close-near' : 1.5,
'intimate-close' : -2.0,
'intimate-near' : -1.0,
'near-close' : -1.5,
'near-intimate' : 1.0}
C = sum(abs(scores[uv]) for uv in scores) * 10
############################################################
# milp
'''
initialize problem
'''
prob = LpProblem('-'.join(words), LpMaximize)
'''
initialize variables
'''
x = dict()
d = dict()
w = dict()
s = dict()
for uv in pairs:
w[uv] = LpVariable('w_' + uv, 0, 1, LpInteger )
s[uv] = LpVariable('s_' + uv, 0, 1, LpInteger )
d[uv] = LpVariable('d_' + uv, 0, 1, LpContinuous)
for u in words:
x[u] = LpVariable('x_' + u, 0, 1, LpContinuous)
'''
objective function
'''
objective = [ (w[ij] - s[ij]) * scores[ij] for ij in pairs ]
prob += lpSum(objective)
'''
constraints
'''
# d_ij = x_j - x_i
for ij in pairs:
[i,j] = ij.split('-')
prob += x[j] - x[i] == d[ij]
# d_ij - w_ij * C <= 0
for ij in pairs:
prob += d[ij] - w[ij] * C <= 0
# d_ij + (1 - w_ij) * C > 0
for ij in pairs:
prob += d[ij] + (1 - w[ij]) * C > 0
# d_ij + s_ij * C >= 0
for ij in pairs:
prob += d[ij] + s[ij] * C >= 0
이 추가 제약은 목적 함수를 무효 : 여기서
MAXIMIZE
0*__dummy + False
가 의도 한대로 동작 추가 제약없이 제형이다
# d_ij - (1 - sij) * C < 0
for ij in pairs:
prob += d[ij] - (1 - s[ij]) * C < 0
무엇을 제공합니까?