5
$\begingroup$

For the function

$$ f(x_1,x_2;a_0,b_0)=\\\small\cases{\frac{1}{2}\left[x_1+x_2-x_1x_2+\left(\frac{-1+b_0(1-a_0)}{a_0}x_1+1\right)\left(\frac{-1+b_0(1-a_0)}{a_0}x_2+1\right)\right],\quad 0 \leq x_1\leq a_0,\, 0 \leq x_2\leq a_0\\ \frac{1}{2}\left[x_1+x_2-x_1x_2+\left(\frac{-1+b_0(1-a_0)}{a_0}x_1+1\right)b_0(-x_2+1)\right],\quad\quad\,\,\,\,\,\quad 0 \leq x_1\leq a_0,\, a_0 \leq x_2\leq 1\\ \frac{1}{2}\left[x_1+x_2-x_1x_2+b_0(-x_1+1)\left(\frac{-1+b_0(1-a_0)}{a_0}x_2+1\right)\right],\quad\quad\,\,\,\,\quad a_0 \leq x_1\leq 1,\, 0 \leq x_2\leq a_0\\ \frac{1}{2}\left[x_1+x_2-x_1x_2+b_0(-x_1+1)b_0(-x_2+1)\right],\quad\quad\quad\quad\quad\quad\quad a_0 \leq x_1\leq 1,\, a_0 \leq x_2\leq 1}$$

and

$$f(x_1=x_2;a_0,b_0)=\cases{\frac{1}{2}\left[2x_1-{x_1}^2+\left(1+\frac{x_1(1+b_0(1-a_0))}{a_0}\right)^2\right],\quad 0 \leq x_1 \leq a_0\\\frac{1}{2}\left[2x_1+b_0^2(1-x_1)^2-x_1^2\right],\quad\quad\quad\quad\,\quad a_0 \leq x_1 \leq 1}$$

I would like to solve the following optimization problem:

$$\max_{a_0,b_0\in[0,1]}\left[\min_{{x_1=x_2\in[0,1]}}f(x_1,x_2;a_0,b_0) -\min_{{x_1,x_2\in[0,1]}}f(x_1,x_2;a_0,b_0)\right]$$

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?

$\endgroup$
6
  • $\begingroup$ I cannot find conditions concerning b0 in your function definition, something seems to be wrong! $\endgroup$ Aug 3, 2018 at 9:46
  • $\begingroup$ @UlrichNeumann please see the problem definition. $a_0$ and $b_0$ are in $[0,1]$. Does this clarify your question? $\endgroup$ Aug 3, 2018 at 9:51
  • $\begingroup$ Unfortunately not. The restriction 0<b0<1 doesn't appear in your Piecewise-function. For numerical optimization your function must return a numerical value! $\endgroup$ Aug 3, 2018 at 10:27
  • $\begingroup$ @UlrichNeumann you said optimization and for optimization you already have it. I don't understand you at all. The function can be general and I may be interested in making an optimization for some certain part of this function. Forget the function $f$ completely. Just insert this function in to the problem definition. Then delete the function $f$. Now you have a problem which is valid and independent of $f$. $\endgroup$ Aug 3, 2018 at 10:33
  • $\begingroup$ Sorry for trying to help: I adapted your function definition f[x1_ ?NumericQ, x2_?NumericQ , a0 _?NumericQ , b0_?NumericQ ]:=... .The test f[.9, .8, 0.1, .7] keeps unevaluated. So any numerical programm cannot succeed $\endgroup$ Aug 3, 2018 at 10:47

1 Answer 1

4
$\begingroup$

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}*)
$\endgroup$
5
  • $\begingroup$ Thank you very much for the answer. Wow, 10 minutes! It means If I have more variables then I will have troubles.. $\endgroup$ Aug 3, 2018 at 11:40
  • $\begingroup$ Would it be possible to get $x_1$ and $x_2$ just at the output of the optimization? I run the same code as you posted and got surprisingly a different result. a0=0.911439 and b0=0.808984 and the maximum value is 0.495. I have version 10.3. I think both results are problematic. I just checked your result and I found $x_1=x_2=0.2935$ and $x__1=0.4155$ with $x_2=0$. For this the result is $0.086$. $\endgroup$ Aug 3, 2018 at 13:43
  • $\begingroup$ One more thing: I have the feeling that your result for $a_0$ and $b_0$ are almost correct. I guess $a_0=0.4155$ and $b_0=0$ should be the correct values. $\endgroup$ Aug 3, 2018 at 14:01
  • $\begingroup$ The function jeq[a0, b0] - juq[a0, b0] you try to maximize seems to be very complicated. I tried a Plot3d[jeq[a0, b0] - juq[a0, b0],...] but mathematica didn't finish the plot after 1hour... $\endgroup$ Aug 3, 2018 at 14:28
  • $\begingroup$ Thank you very much. $\endgroup$ Aug 3, 2018 at 22:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.