설명
이 모델은 농부가 할당 방법을 결정하는 데 도움이 됩니다. 그의 땅. 수익률은 불확실합니다. 여기서 우리는 Lindo NBD 알고리즘이 적용되었으며 이후 모델을 수정해야 합니다. Lindo의 NDB 알고리즘에서는 RV가 한 번만 발생해야 합니다. 모델에서.
소형 모델 유형 :SP
카테고리 : 슬롯 EMP 라이브러리
메인 파일 : farmnbd.gms
$title 농부의 문제 - NBD를 사용한 확률론적 (FARMNDB,SEQ=100)
$onText
이 모델은 농부가 할당 방법을 결정하는 데 도움이 됩니다.
그의 땅. 수익률은 불확실합니다. 여기서 우리는
Lindo NBD 알고리즘이 적용되었으며 이후 모델을 수정해야 합니다.
Lindo의 NDB 알고리즘에서는 RV가 한 번만 발생해야 합니다.
모델에서.
Birge, R 및 Louveaux, FV, 확률론적 프로그래밍 소개.
스프링거, 1997.
기여자: 마이클 페리스
$offText
* 린도(Lindo)에게만 실행
$ifI가 "%슬롯emp%"=="lindo"가 아닌 경우 $exit
세트 작물/밀, 옥수수, 사탕무/
데이터 테이블의 ch 헤더 /
에이커당 톤 단위의 수확량
비용 식물비용(에이커당 달러)
price 작물 종자 구매 가격(톤당 달러)
minreq 소에게 먹이를 주기 위한 작물의 최소 요구량(톤) /
별칭(c,자르기);
테이블 cd(crop,ch) 자르기 데이터
수율 비용 price minreq
밀 2.5 150 238 200
옥수수 3 230 210 240
사탕무 20 260
;
매개변수
yf(crop) 수확량 계수 / #crop 1 /
토지 이용 가능한 토지(에이커) /500/;
순차 가격 곡선 세그먼트 설정 / s1*s2 /;
테이블 가격곡선(작물,순서,*) 톤당 달러
가격은 어때요?
밀.s1 170inf
corn.s1 150인치
sugarbeets.s1 36 6000
sugarbeets.s2 10인치
;
pc(crop,seq) 관련 세그먼트를 설정합니다. 옵션개<가격곡선;
오류 설정PC(작물) 가격 곡선이 오목하지 않습니다.
errorPC(c) = smin(pcs(c,seq), 가격곡선(c,seq,'가격')-가격곡선(c,seq+1,'가격'))<0;
중단$카드(errorPC) errorPC;
변수
x(c) 에이커의 땅에 심은 작물
w(c,seq) 비용 곡선 부분에서 판매된 작물(톤)
y(c) 톤 단위로 구매한 작물
이익 목적 변수(달러);
양의 변수 x,w,y;
방정식
이익 정의 목적 함수
토지 이용 용량
bal(c) 작물 균형;
이익def.. 이익 =e= sum(pcs, w(pcs)*pricecurve(pcs,'price'))
- sum(c, cd(c,'비용')*x(c) + cd(c,'pprice')*y(c));
토지이용.. sum(c, x(c)) =l= 토지;
bal(c).. yf(c)*cd(c,'수율')*x(c) + y(c) - sum(pcs(c,seq), w(pcs)) =g= cd(c,'minreq');
* 구매가격이 없는 작물은 구매 불가
y.fx(c)$(cd(c,'pprice')=0) = 0;
w.up(pcs) = 가격곡선(pcs,'ub');
모델 farm_emp /all/;
s 시나리오 설정 / s1*s3 /;
매개변수 probab(s) / s1 0.25, s2 0.50, s3 0.25 /;
매개변수 yfac(들) / s1 0.8, s2 1.0, s3 1.2 /;
파일 emp / '%emp.info%' /; put emp '* 문제 %슬롯i%'/;
'jrandvar'를 넣어;
loop(c, put yf.tn(c); );
놓다 /;
루프(들), probab(들) 넣기;
loop(c, yfac(들) 넣기);
넣어 /;
);
putclose '2단계 yf y w 균형 이익';
매개변수
srep(s,*) 시나리오 속성 / #s.prob 0 /
s_yf(s,c) 시나리오 및 작물별 수확량 계수 실현
s_profit(s) 시나리오별 이익
s_w(s,c,seq) 시나리오별 비용 곡선 세그먼트에서 판매된 작물(톤)
s_y(s,c) 시나리오별로 톤 단위로 구매한 작물;
dict/s .scenario를 설정하세요.''
'' .opt. srep
yf.randvar. s_yf
이익 수준. s_profit
w.레벨. s_w
y.레벨. s_y /;
farm_emp.optcr = 1e-6;
farm_emp.optca = 1e-2;
* 처음 두 옵션은 Lindo 내에서 NBD 알고리즘을 선택합니다.
* NBD 알고리즘에는 무작위 변수가
* 한 번 발생합니다. 그렇지 않으면 Lindo는 다음 메시지를 발행하고 종료합니다.
* *** Lindo는 NBD 방식으로 하나의 RV가 여러 번 발생하는 것을 허용하지 않습니다.
* 따라서 2009년에 발생한 RV yf(항복률)을 대체하였습니다.
* 결합된 RV yf(c) 세트에 의한 모든 작물 c에 대한 bal 방정식. 원본
* 단일 RV가 있는 모델은 farmsp에서 캡처됩니다.
$onEcho > lindo.opt
STOC_MAP_MPI2LP 1
STOC_METHOD 1
STOC_CALC_EVPI 0
$offEcho
옵션 emp = 린도;
farm_emp.optfile = 1;
이익을 극대화하는 emp 시나리오 dict를 사용하여 farm_emp를 해결합니다.
디스플레이 srep, s_yf;