Search code examples
matlaboptimizationminimization

Solve optimization using fmincon MATLAB when objective function is in constraints


I want to solve: enter image description here

I use following MATLAB code, but it does not work.

Can someone please guide me?

function f=objfun

f=-f;

function [c1,c2,c3]=constraint(x)
a1=1.1; a2=1.1; a3=1.1;
c1=f-log(a1)-log(x(1)/(x(1)+1)); 
c2=f-log(a2)-log(x(2)/(x(2)+1))-log(1-x(1)); 
c3=f-log(a3)-log(1-x(1))-log(1-x(2));


x0=[0.01;0.01]; 
[x,fval]=fmincon('objfun',x0,[],[],[],[],[0;0],[1;1],'constraint')

Solution

  • You need to flip the problem around a bit. You are trying to find the point x (which is (l_1,l_2)) that makes the minimum of the 3 LHS functions the largest. So, you can rewrite your problem as, in pseudocode,

    maximise, by varying x in [0,1] X [0,1]
           min([log(a1)+log(x(1)/(x(1)+1)) ...
                log(a2)+log(x(2)/(x(2)+1))+log(1-x(1)) ...
                log(a3)+log(1-x(1))+log(1-x(2))])
    

    Since Matlab has fmincon, rewrite this as a minimisation problem,

    minimise, by varying x in [0,1] X [0,1]
           max(-[log(a1)+log(x(1)/(x(1)+1)) ...
                 log(a2)+log(x(2)/(x(2)+1))+log(1-x(1)) ...
                 log(a3)+log(1-x(1))+log(1-x(2))])
    

    So the actual code is

    F=@(x) max(-[log(a1)+log(x(1)/(x(1)+1)) ...
                 log(a2)+log(x(2)/(x(2)+1))+log(1-x(1)) ...
                 log(a3)+log(1-x(1))+log(1-x(2))])
    [L,fval]=fmincon(F,[0.5 0.5])
    

    which returns

    L =
        0.3383    0.6180
    fval =
        1.2800