# Log barrier function optimization

Let’s consider the following convex optimization problem of minimizing the log barrier function:
$$\min_{\textbf{x}\in \Re^n}f(\textbf{x})=\min_{\textbf{x}\in \Re^n}\bigg{\textbf{c}^T\textbf{x}-\sum\limits_{i=1}^mlog(b_i-\textbf{a}_i^T\textbf{x})\bigg}$$
where x\in \Re^{n\times 1} \text{, } c\in \Re^{n\times 1} \text{, } b\in \Re^{m\times 1} \text{, } A\in \Re^{m\times n} \text{.} I am trying to solve this problem for the unconstrained case using Matlab CVX software before trying Newton’s method. I initially tried without using any constraint and I got the result that the problem is unbounded and that the optimal value is -inf. This error makes sense since some of the b_i-\textbf{a}_i^T\textbf{x} are less than 1 and then minimizing over a set of complex numbers doesn’t make sense. Then I thought that it’s OK to add the constraint b_i-\textbf{a}_i^T\textbf{x}>0 \text{ for } i=1,2,...,m because of the logarithm. But I got the same results. I don’t know what to do to avoid this. Each element of the matrices \textbf{A}, \textbf{b} and \textbf{c} is produced randomly in [0,1] (uniformly distributed samples). Should I produce these values in some other way?

Here is the Matlab code:

clear, clc, close all

%Dimension of the problem
n = 2;

%Number of summation terms
m = 20;

%Random vector c
c = rand(n, 1);

%Random vector b
b = rand(m, 1);

%Random array A
A = rand(m, n);

%CVX optimization
cvx_begin
variable x(n)
minimize(c.'*x - sum(log(b - A*x)))
subject to      %Initially without this line
b - A*x > 0 %Initially without this line
cvx_end

As I said on Math.SE: how do you know CVX isn’t giving you the right answer? Specifically, how do you know that the set \{x\,|\,Ax\geq b\} is bounded? Because if it’s not bounded, the answer is quite possibly -\infty.

And do take heed of CVX’s warnings about the use of logarithms.

I am very new to CVX and even though I have read the manual, I don’t understand some things. I’m reposting my last comment on Math SE, which still troubles me, here : “Can you be more specific? First, I suppose that you mean that I should guarantee that bi−aiTx>0\ for\ all\ i∈{1,2,...,m} and for all $x$s that the execution visits. If that’s correct, what should I do about it before executing CVX code?”

No, what I’m saying has nothing to do with CVX. What I’m saying is that you’ve done nothing to establish that the solution of your minimization problem is finite. You’ve just selected a random set of half-spaces, with no guarantee that their intersection is bounded. I really can’t help further with your modeling.

And as I said before, CVX is not the right tool here. You should be using Newton’s method for this problem. Not only is CVX going to be slow and inefficient, but as the documentation says above, its logarithm capability is unsupported and unreliable.