lindgl04.gms : Lindo(Global)를 사용하여 비볼록 2차 프로그램 테스트

설명

이 테스트에서 우리는 Lindo가 올바른 솔루션을 반환하는지 확인합니다. 특히
볼록하지 않은 QCP의 경우 한계를 수정하세요.

소형 모델 유형 :슬롯 커뮤니티


카테고리 : 슬롯 커뮤니티 테스트 라이브러리


메인 파일 : lindgl04.gms

$title 'Lindo(전역)를 사용하여 비볼록 2차 프로그램 테스트' (LINDGL04,SEQ=695)

$onText
이 테스트에서 우리는 Lindo가 올바른 솔루션을 반환하는지 확인합니다. 특히
볼록하지 않은 QCP의 경우 한계를 수정합니다.
$offText

세트
    나는 /i1*i5/
별칭(i,j);

매개변수
    c(i) /i1 42
           i2 44
           i3 45
           i4 47
           i5 47.5/
    a(i) / i1 20
           i2 12
           i3 11
           i4 7
           i5 4 /
    Q(i,j)
;

Q(i,i) = -50;

변수
    x(i)
    에프;

x.lo(i) = 0;
x.up(i) = 1;

방정식
    Obj 목적 함수
    Con 제약 함수;

오브제 ..
    f =e= 합(i, c(i)*x(i)) + 합((i,j), x(i)*Q(i,j)*x(j));

콘 ..
    합계(i, a(i)*x(i)) =l= 40;

모델
    문제 /Obj, Con/;

옵션 optcr=0;
옵션 qcp=LindoGlobal;
f를 최소화하는 qcp를 사용하여 문제를 해결합니다.

abort$(problem.ModelStat <> %modelStat.optimal%) '최적의 솔루션 기대 중';
abort$(con.slack = 0) 'con이 바인딩되지 않을 것으로 예상함';

MaringalError(i) 설정;
MaringalError(i) = abs(c(i)+2*Q(i,i)*x.l(i)-x.m(i)) > 1e-8;

abort$card(MaringalError) 'x에 대한 잘못된 솔루션', MaringalError;