给出一个分段函数:
c
(
x
)
=
{
10
x
0
≤
x
≤
500
1000
+
8
x
5
00
≤
x
≤
1000
3000
+
6
x
1
000
≤
x
≤
1500
c(x) = begin{cases} 10x &text 0le xle 500 \ 1000+8x &text 500le xle 1000\ 3000+6x &text 1000le xle 1500 end{cases}
c(x)=⎩⎪⎨⎪⎧10x1000+8x3000+6x0≤x≤500500≤x≤10001000≤x≤1500
将采购量x分为三个部分:
x
=
x
1
+
x
2
+
x
3
x=x_{1}+x_{2}+x_{3}
x=x1+x2+x3
则有:
(
x
1
−
500
)
x
2
=
0
(
x
2
−
500
)
x
3
=
0
(x_{1}-500)x_{2}=0 \ (x_{2}-500)x_{3}=0
(x1−500)x2=0(x2−500)x3=0
x2只有在x1超过500后才不为0,而x1=500时该式为0,故该式始终为0
引入0-1规划,令y1,y2,y3分别为0-1变量,当取1时分别表示以10元,8元,6元购买,则有:
500
y
2
≤
x
1
≤
500
y
1
500
y
3
≤
x
2
≤
500
y
2
x
3
≤
500
y
3
500y_{2}le x_{1}le 500y_{1} \ 500y_{3}le x_{2}le 500y_{2} \ x_{3}le 500y_{3}
500y2≤x1≤500y1500y3≤x2≤500y2x3≤500y3
y1必然取1,当y2取0时,表示购买量没有超过500,而当y2取1时,说明购买量已超过500,进入下一段
对于任意区间[a,b],其中的一点x,总存在:
x
=
k
1
a
+
k
2
b
,
k
1
+
k
2
=
1
x=k_{1}a+k_{2}b,k_{1}+k_{2}=1
x=k1a+k2b,k1+k2=1
且此段函数能够表示为:
c
(
x
)
=
k
1
c
(
a
)
+
k
2
c
(
b
)
c(x)=k_{1}c(a)+k_{2}c(b)
c(x)=k1c(a)+k2c(b)
此处,对于函数的三段,有四个分界点:
b
0
=
0
,
b
1
=
500
,
b
2
=
1000
,
b
3
=
1500
b_{0}=0,b_{1}=500, b_{2}=1000, b_{3}=1500
b0=0,b1=500,b2=1000,b3=1500
x在哪个区间上?引入0-1变量y1,y2,y3,则:
k
1
≤
y
1
k
2
≤
y
1
+
y
2
k
3
≤
y
2
+
y
3
k
4
≤
y
3
k_{1}le y_{1}\ k_{2}le y_{1}+y_{2}\ k_{3}le y_{2}+y_{3}\ k_{4}le y_{3}
k1≤y1k2≤y1+y2k3≤y2+y3k4≤y3
统一表示为:
x
=
k
1
b
1
+
k
2
b
2
+
k
3
b
3
c
(
x
)
=
k
1
c
(
b
1
)
+
k
2
c
(
b
2
)
+
k
3
c
(
b
3
)
k
1
+
k
2
+
k
3
=
1
x=k_{1}b_{1}+k_{2}b_{2}+k_{3}b_{3}\ c(x)=k_{1}c(b_{1})+k_{2}c(b_{2})+k_{3}c(b_{3})\ k_{1}+k_{2}+k_{3}=1
x=k1b1+k2b2+k3b3c(x)=k1c(b1)+k2c(b2)+k3c(b3)k1+k2+k3=1
sets: points/1..4/: b, c, y, k; endsets data: n=3; b=0 500 1000 1500;!函数分段点 c=0 5000 9000 12000; enddata Max=4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - @sum(points: c*k); x11+x12 < x + 500; x21+x22 < 1000; 0.5*x11 - 0.5*x21 > 0; 0.4*x12 - 0.6*x22 > 0; @for(points(k)|(k#NE#1)#AND#(k#NE#(n+1)): !#NE#不等于 z(k) < y(k-1) + y(k); ); z(1)



