2017-10-02 11 views
2

혼합 정수 프로그래밍 문제가 있습니다. 목적 함수는 벡터의 최대 변수 값을 최소화하는 것입니다. 변수는 문제점이 같다 (5)의 상한을 갖는다 :최대 변수 최소화

m = Model(solver = GLPKSolverMIP()) 
@objective(m, Min, max(x[i] for i=1:12)) 
@variable(m, 0 <= x[i] <= 5, Int) 
@constraint(m, sum(x[i] for i=1:12) == 12) 
status = solve(m) 

최대 변수 줄리아 점프 구문의 일부가 아니다. 그래서

t=1 
while t<=5 && (status == :NotSolved || status == :Infeasible) 
    m = Model(solver = GLPKSolverMIP()) 
    i = 1:12 

    @objective(m, Min, max(x[i] for i=1:12)) 
    @variable(m, 0 <= x[i] <= t, Int) 
    @constraint(m, sum(x[i] for i=1:12) == 12) 

    status = solve(m) 
    t += 1 
end 

이 솔루션은 하나의 변수에 대한 상한으로 시작하는 반복하고 solutoin이 가능하다 때까지 하나 증가 문제를 해결하여 작업을 수행하여 문제를 수정했습니다. 이것을 실제로하는 것이 가장 좋은 방법입니까?

+1

잘 이해했다면 선형 문제가 아니라 원래 문제가 (최대 때문에). JuMP에서는 NLP 최적화를 위해 Ipopt를 사용할 수 있습니다 (그러나 IPOPT가 혼합 정수 비선형 프로그래밍을 지원하는지 모르겠습니다) – Antonello

답변

0

질문은 최대 값을 최소화하려고합니다.이 최대 값을 보조 변수에 넣은 다음 최소화합니다. 그렇게하려면 제약 조건을 추가하여 새 변수가 실제로는 x의 상한이되게하십시오. 코드에서는 다음과 같습니다

julia> getValue(t) 
4.0 

julia> getValue(x) 
3-element Array{Float64,1}: 
4.0 
4.0 
4.0 

포스터를 해결하고 싶었 실제 문제는 아마이가 더 복잡하지만,의 변형으로 해결할 수 있습니다

using GLPKMathProgInterface 
using JuMP 

m = Model(solver = GLPKSolverMIP()) 

@variable(m, 0 <= x[i=1:3] <= 5, Int) # define variables 
@variable(m, 0 <= t <= 12)    # define auxiliary variable 
@constraint(m, t .>= x)    # constrain t to be the max 

@constraint(m, sum(x[i] for i=1:3) == 12) # the meat of the constraints 

@objective(m, Min, t)     # we wish to minimize the max 

status = solve(m) 

이제 우리는 해결책을 검사 할 수 있습니다 이 프레임 워크.