I have a polynomial:


$$f(x\_1 \dots x\_n) = \prod\_{i=1}^n (c\_ix\_i + 1) - \frac{1}{2}c\_0\sum\_{i=1}^nx\_i^2$$


Given some values for $c\_0 \dots c\_n$, I'd like to choose the maximizing values for $x\_1 \dots x\_n$. I'm not concerned with the actual maximum value of $f(x\_1 \dots x\_n)$, only the values of the inputs $x\_1 \dots x\_n$, so if there is an equivalent function maximized at the same values I value the solution just as much. The values for any $c$ and any $x$ can be any real value.


I'm not familiar with any easy ways to do this with a polynomial of this type. My best guess is gradient ascent, but I'm not sure the function is convex. 


Can anyone tell me if the function is convex, or failing that, if there's another way to find an (approximate) global argmax?



Optimization of a Specific Polynomial
As noted by Pietro in the comments only a few combinations of $n$ and coefficients will even *have* a finite maximum, unless you bound your domain. For example, consider $c\_0=-2$ and all other $c\_i=0$. Even this is unbounded above.


Now, let's assume you either bound your domain, or have ensured that the polynomial is bounded above. The problem of finding the argmax is computationally "difficult" for large $n$ (as in: the cryptography guys worry about this stuff a lot at least in finite fields), so numerical optimization methods do probably make sense. Assuming your coefficients are sufficiently generic, a sequential quadratic programming technique will definitely work much better than gradient-climbing.


Your main problem is going to be the perennial one of having lots of local argmaxes without necessarily finding the best of them. You'll have to find them by combining your local optimization with something like a simulated annealer or differential evolution. In principle, with a polynomial, you get to count roots and therefore know whether you have them all.


