기금넷 공식사이트 - 복권 조회 - 2002년 수학적 모델링 문제 B "복권의 수학"에서 MATLAB 또는 LINGO를 사용하여 비선형 문제에 대한 최적 솔루션의 코드 구현입니다. (제목은 아래와 같습니다.

2002년 수학적 모델링 문제 B "복권의 수학"에서 MATLAB 또는 LINGO를 사용하여 비선형 문제에 대한 최적 솔루션의 코드 구현입니다. (제목은 아래와 같습니다.

혼합 정수 계획법 문제여야 합니다. 현재 MATLAB에는 이 문제를 해결하기 위한 관련 기능이 없습니다.

저는 "하이브리드(비)선형 프로그래밍 소프트웨어 패키지"를 개발했는데, 그 설명은 다음과 같습니다. (죄송하지만 일부는 Word에서 표시할 수 없습니다.)

이 소프트웨어 패키지의 주요 프로그램에는 두 가지가 있습니다. 하나는 혼합 선형 프로그래밍을 다루는 것이고, 다른 하나는 비선형 프로그래밍을 다루는 것입니다.

1. 혼합 선형 계획법(MixIntDiscLineProg.m)

2. 혼합 비선형 계획법 문제(MixIntDiscNLProg)

여기서 는 독립 변수이고 는 벡터입니다. 의 상한 및 하한은 각각 선형 제약 조건의 방정식 제약 조건의 계수 행렬 및 상수 항이고, 선형 제약 조건의 계수 행렬 및 부등식 제약 조건이며, 각각 비선형 제약 조건의 방정식 제약 조건 및 부등식 제약 조건입니다. 은 값 범위가 이고, 는 정수 변수이고, 나머지는 연속 변수입니다.

xstatus 배열을 사용하여 이산 또는 정수 변수의 상태를 설정할 수 있습니다. 여기서 xstatus (1,:)는 xstatus (2,:)에 있는 이산 또는 정수 변수의 첨자입니다. 의 각 요소의 값은 1 또는 2이다. 1이면 해당 열의 독립변수가 정수변수임을 의미한다. 2이면 해당 열의 변수가 이산변수임을 의미한다. ;은 값 범위의 서수에 있는 해당 열의 이산 변수 값이거나, 변수가 정수인 경우 0입니다. 따라서 다음과 같이 표현될 수 있습니다:

여기에 설명할 네 가지 예가 있으며 나머지는 다음 설명에서 볼 수 있습니다.

예 1. 모든 변수는 정수입니다.

두 프로그램에서 별도로 수정하세요.

isAllInteger=1;

나머지 이산 변수 값 범위는 설정할 필요가 없습니다.

예시 2. x2, x4, x7은 정수이고 나머지는 연속형 변수입니다.

두 프로그램을 각각 수정합니다.

isAllInteger=0;

다음과 같이 수정합니다.

"checkIntDisc"를 호출하는 모든 것 기본 프로그램 형식은 "checkIntDisc(..., xstatus)"가 됩니다.

예 3. x2, x4는 정수이고, x3, x7, x9는 D1 세트에서 가져오고 나머지는 연속 변수입니다.

두 프로그램을 각각 수정합니다.

isAllInteger=0;

다음과 같이 수정합니다.

"checkIntDisc"를 호출하는 모든 것 기본 프로그램 형식은 "checkIntDisc(..., xstatus, D1)"입니다.

예 4. x2, x4는 정수이고, x3 및 x9는 D1 세트에서 가져오고, x7은 값 D2를 가져오고, 나머지는 연속형 변수입니다.

두 프로그램을 각각 수정합니다.

isAllInteger=0;

다음과 같이 수정합니다.

"checkIntDisc"를 호출하는 모든 것 기본 프로그램 형식이 "checkIntDisc(..., xstatus, D1, D2)"로 변경됩니다.

두 프로그램을 사용하기 위한 구체적인 단계: Matlab 환경에서는 "File/set path... " 경로를 추가하려면 "\ ..." 실제 문제를 기반으로 다음 6단계에 따라 일련의 매개변수와 파일을 수정하십시오.

1) 매개변수는 fmincom 함수의 요구 사항에 따라 제공됩니다. m

A , B, Aeq, Beq, LB, UB, X0

2) 'obj_fun.m'은 목적 함수 소스 파일입니다.

3) 'nl_con_fun.m'은 비선형 제약 소스 파일입니다(정수 또는 이산 요구 사항을 포함하지 않음)

4) 모든 구성 요소가 정수 요구 사항인지 여부를 설정합니다.

isAllInteger=1; 정수

isAllInteger =0 모든 구성요소가 정수는 아닙니다

5) 값 범위 매개변수 D1 수정 - 이산 변수의 Dm

D1=; x(1), x(2 ), x(3)

D2=[2.5, 3, 4, 6, 8, 10, 12.2, 16.6]; 필요한 경우 “checkIntDisc(. .., xstatus, D1)”를 “checkIntDisc(..., xstatus, D1, .., Dm)”으로 수정합니다.

6) 배열 수정

자세한 내용은 다음 주소로 보내주세요: spjin@whut.edu.cn