bidpwl.gms : 조각 선형 함수를 사용한 입찰 평가

설명

회사는 공급업체로부터 공급에 대한 다수의 입찰을 받았습니다.
품목의 지정된 단위 수. 제출된 대부분의
입찰에는 사업 규모에 따라 가격이 달라집니다. 공식
0/1 변수가 있는 것은 원래 gamslib 모델 무료 슬롯에 표시됩니다.
SOS2는 gamslib 모델 bidsos에 설정됩니다. 여기서는 점, 길이,
모델을 정의하기 위한 기울기입니다.

소형 모델 유형 :MIP


카테고리 : 무료 슬롯 모델 라이브러리


메인 파일 : bidpwl.gms   포함: pwlfunc.inc

$title 조각 선형 함수를 사용한 입찰 평가(BIDPWL,SEQ=385)

$onText
회사는 공급업체로부터 공급에 대한 여러 입찰을 받습니다.
품목의 지정된 단위 수. 제출된 대부분의
입찰에는 사업 규모에 따라 가격이 달라집니다. 공식
0/1 변수가 있는 것은 원래 gamslib 모델 무료 슬롯에 표시됩니다.
SOS2는 gamslib 모델 bidsos에 설정됩니다. 여기서는 점, 길이,
모델을 정의하기 위한 기울기입니다.

Bracken, J 및 McCormick, G P, 3장. 선택된 응용 분야
비선형 프로그래밍의. 존 와일리 앤 선즈(John Wiley and Sons), 뉴욕, 1968년,
28~36쪽.

키워드: 혼합 정수 선형 계획법, 입찰 평가, 미시 경제학,
          조각별 선형 함수
$offText

$eolCom //

세트
   v '공급업체' / a, b, c, d, e /
   cl '열 레이블' / 설정, 가격, q-최소, q-최대, 비용 /
   s '세그먼트' / 0*5 /
   sl '세그먼트 라벨' / x, y '좌표', l '길이', g '기울기' /;

스칼라 req 'requirements' / 239600.48 /;

테이블 무료 슬롯(v,s,cl) '입찰 데이터'
             설정 가격 q-최소 q-최대
   a.1 3855.84 61.150 33000
   b.1 125804.84 68.099 22000 70000
   b.2 66.049 70000 100000
   b.3 64.099 100000 150000
   b.4 62.119 150000 160000
   c.1 13456.00 62.190 165600
   d.1 6583.98 72.488 12000
   e.1 70.150 42000
   e.2 68.150 42000 77000;

매개변수 BidPwl(v,s,sl) '입찰 세그먼트 정의';
bidpwl(v, s,'x') = 무료 슬롯(v,s,'q-min');
bidpwl(v,'1','y') = 무료 슬롯(v,'1','setup') + 무료 슬롯(v,'1','q-min')*무료 슬롯(v,'1','price');
bidpwl(v, s,'l') = 무료 슬롯(v,s,'q-max') - 무료 슬롯(v,s,'q-min');
bidpwl(v, s,'g') = 무료 슬롯(v,s,'가격');
bidpwl(v,'0','g') = 1; // 거래 없음

$onText
다음 batinclude에는 첫 번째 인수로 매개변수 p가 있습니다.
조각별 선형 함수의 세그먼트를 정의합니다. 시작점 (x,y)
세그먼트와 길이 및 경사가 제공되어야 합니다.
매개변수. 실제 라벨은 바틴클루드에도 제공됩니다.
세그먼트 세트(인수 2)와 함께 호출(인수 3-6) 및
여러 항목을 정의하기 위해 색인화된 매개변수를 정의하는 선택적 색인 세트(idxp)
조각별 선형 함수(arg 7). 선택적 인수 8과 9는 다음을 허용합니다.
다른 내생 인수(idxm)를 사용하여 동일한 함수 f를 사용합니다.

batinclude는 활성 세그먼트 p_Seg(s)의 하위 집합을 제공합니다.
매개변수에는 batinclude 호출 이전에 데이터가 있어야 합니다. 바틴클루드는 또한
몇 가지 매크로를 제공합니다.
1) p_Func(x[,idxp])는 x 지점에서 함수를 평가합니다.
2) x(idxm) 값을 할당하는 p_x([idxp][,idxm]) 표현식
3) y(idxm) 값을 할당하는 p_y([idxp][,idxm]) 표현식

pwlfunc.inc의 헤더에는 그 사용법이 더 자세히 설명되어 있습니다.
$offText

$batInclude pwlfunc.inc BidPwl s x y l g v

* s2 이상의 누락된 y 좌표 채우기
loop(BidPwl_Seg(v,s)$(ord(s) > 2),
   BidPwl(v,s,'y') = BidPwl(v,s-1,'y') + BidPwl(v,s-1,'g')*BidPwl(v,s-1,'l');
);

변수
   c '총 비용'
   x(v) '공급업체 단위'
   y(v) '공급업체 단위';

방정식
   defx(v) '공급업체 단위 정의'
   수요 '수요 제약'
   defy(v) '공급업체 단위 비용 정의'
   costdef '비용 정의';

defx(v).. x(v) =e= BidPwl_x(v);

수요..req =e= sum(v, x(v));

defy(v)..y(v) =e= BidPwl_y(v);

비용 정의.. c =e= sum(v, y(v));

모델 bieval / all /;

옵션 optCr = 0.0;

mip를 사용하여 c를 최소화하는 bideval을 해결합니다.

매개변수 담당자;
담당자(v,'xmodel') = x.l(v);
담당자(v,'ymodel') = y.l(v);
rep(v,'yexec') = BidPwl_Func(x.l(v),v);
담당자(v,'diff') = 담당자(v,'ymodel') - 담당자(v,'yexec');
abort$(sum(v, abs(rep(v,'diff'))) > (1e-6)*card(v))'모델과 실행 시간이 일치하지 않음', rep;
디스플레이 담당자;