For the function
f(x1,x2;a0,b0)={12[x1+x2−x1x2+(−1+b0(1−a0)a0x1+1)(−1+b0(1−a0)a0x2+1)],0≤x1≤a0,0≤x2≤a012[x1+x2−x1x2+(−1+b0(1−a0)a0x1+1)b0(−x2+1)],0≤x1≤a0,a0≤x2≤112[x1+x2−x1x2+b0(−x1+1)(−1+b0(1−a0)a0x2+1)],a0≤x1≤1,0≤x2≤a012[x1+x2−x1x2+b0(−x1+1)b0(−x2+1)],a0≤x1≤1,a0≤x2≤1
and
f(x1=x2;a0,b0)={12[2x1−x12+(1+x1(1+b0(1−a0))a0)2],0≤x1≤a012[2x1+b20(1−x1)2−x21],a0≤x1≤1
I would like to solve the following optimization problem:
maxa0,b0∈[0,1][minx1=x2∈[0,1]f(x1,x2;a0,b0)−minx1,x2∈[0,1]f(x1,x2;a0,b0)]
Here is my code for the function f:
f[x1_, x2_] := Piecewise[{{(1/2)*(x1 + x2 - x1*x2 + ((-1 + b0*(1 - a0)) x1/a0 + 1) ((-1 + b0*(1 - a0)) x2/a0 + 1)), 0 <= x1 <= a0 && 0 <= x2 <= a0}, {(1/2)*(x1 + x2 - x1*x2 + ((-1 + b0*(1 - a0)) x1/a0 + 1)*b0 (-x2 + 1)), 0 <= x1 <= a0 && a0 <= x2 <= 1}, {(1/2)*(x1 + x2 - x1*x2 + ((-1 + b0*(1 - a0)) x2/a0 + 1)*b0 (-x1 + 1)), a0 <= x1 <= 1 && 0 <= x2 <= a0}, {(1/2)*(x1 + x2 - x1*x2 + b0 (-x1 + 1)*b0 (-x2 + 1)), a0 <= x1 <= 1 && a0 <= x2 <= 1}}]
Would it be possible also to solve this analytically with Mathematica?
Answer
It is a minmax-problem which you can solve numerically as follows:
f[x1_?NumericQ, x2_?NumericQ, a0_?NumericQ, b0_?NumericQ ] :=
Piecewise[{{(1/2)*(x1 + x2 -x1*x2 + ((-1 + b0*(1 - a0)) x1/a0 +1) ((-1 + b0*(1 - a0)) x2/a0 + 1)),
0 <= x1 <= a0 && 0 <= x2 <= a0},
{ (1/2)*(x1 + x2 - x1*x2 + ((-1 + b0*(1 - a0)) x1/a0 + 1)*b0 (-x2 + 1)),
0 <= x1 <= a0 &&a0 < x2 <=1},
{(1/2)*(x1 + x2 -x1*x2 + ((-1 + b0*(1 - a0)) x2/a0 + 1)*b0 (-x1 + 1)),
a0 < x1 <= 1 &&0 <= x2 <=a0},
{(1/2)*(x1 + x2 - x1*x2 + b0 (-x1 + 1)*b0 (-x2 + 1)),
a0 < x1 <= 1 && a0 < x2 <= 1}}, 0]
You need two functions for the inner -minimization:
jeq [a0_?NumericQ, b0_?NumericQ] :=NMinimize[{f[x, x, a0, b0], 0 < x < 1}, x][[1]]
juq [a0_?NumericQ, b0_?NumericQ] :=NMinimize[{f[x1, x2, a0, b0], 0 < x1 < 1, 0 < x2 < 1}, {x1, x2}][[1]]
Now your problem can be formulated as
max=NMaximize[ {jeq[a0, b0] - juq[a0, b0], {0 <= a0 <= 1,0 <= b0 <= 1}}, {a0, b0}]
(* after 10 minutes: {0.293779, {a0 -> 0.415495, b0 -> 0.00202345}}*)
The values x,x1,x2
for optimal a0,b0
are
NMinimize[{f[x, x, a0, b0] /. max[[2]], 0 < x < 1}, x] [[2]]
(*{x -> 0.293779}*)
NMinimize[{f[x1, x2, a0, b0] /. max[[2]], 0 < x1 < 1,0 < x2 < 1}, {x1, x2}][[2]]
(*{x1 -> -2.16855*10^-28, x2 -> 0.417829}*)
Comments
Post a Comment