I am trying to solve the following signomial optimisation problem:
nVariables = 20;
objectiveFunction = Sum[Log2[1 + 208930 g[i]], {i, nVariables}];
domainConstraints =
Apply[And, Table[0 <= g[i] <= Sqrt[0.02], {i, nVariables}]];
constraints = energyConstraints && domainConstraints;
variables = Table[g[i], {i, nVariables}];
FindMaximum[{objectiveFunction, constraints}, variables]
where variable energyConstraints
is complicated quadratic form constraint. For example
energyConstraints[[1]]
gets
10934.2 g[1]^2 - 1429.54 g[1] g[2] + 10856. g[2]^2 -
2846.57 g[1] g[3] + 2660.53 g[3]^2 - 4693.62 g[1] g[4] +
5564.54 g[4]^2 - 326.326 g[1] g[5] + 171.894 g[3] g[5] +
246.495 g[4] g[5] + 9.19287 g[5]^2 + 5.17916 g[1] g[6] +
65.4551 g[6]^2 + 5703.37 g[7]^2 + 185.581 g[1] g[8] -
1085.53 g[6] g[8] + 9019.75 g[8]^2 + 1477.01 g[1] g[9] +
2419.84 g[2] g[9] + 2158.35 g[3] g[9] + 1507.87 g[4] g[9] +
85.0152 g[5] g[9] + 224.787 g[6] g[9] + 2494.17 g[7] g[9] -
5118.69 g[8] g[9] + 10234.8 g[9]^2 + 3594.23 g[1] g[10] +
2745.93 g[2] g[10] - 2281.44 g[3] g[10] - 2603.06 g[4] g[10] -
123.566 g[5] g[10] + 303.574 g[7] g[10] - 10135.4 g[9] g[10] +
8087.06 g[10]^2 + 829.946 g[1] g[11] + 1628.96 g[2] g[11] -
1005.62 g[4] g[11] - 54.9912 g[5] g[11] + 213.422 g[6] g[11] -
3613.45 g[8] g[11] + 2693.06 g[9] g[11] + 1786.45 g[10] g[11] +
3321.34 g[11]^2 - 2473.01 g[1] g[12] + 4583.47 g[2] g[12] -
2625.2 g[4] g[12] - 2.39978 g[5] g[12] - 4295. g[9] g[12] +
1559.2 g[10] g[12] - 4555.8 g[11] g[12] + 7895.83 g[12]^2 -
2311.77 g[1] g[13] + 1708.81 g[2] g[13] + 1155.91 g[3] g[13] +
80.5025 g[5] g[13] + 126.269 g[6] g[13] - 2122.62 g[8] g[13] +
1986.7 g[9] g[13] - 1345.11 g[10] g[13] + 938.737 g[11] g[13] +
71.6679 g[12] g[13] + 1063.26 g[13]^2 + 1391.33 g[1] g[14] +
1738.55 g[2] g[14] - 1253.92 g[3] g[14] - 2791.54 g[4] g[14] -
132.866 g[5] g[14] - 55.0533 g[9] g[14] - 744.141 g[10] g[14] +
1120.1 g[11] g[14] + 1642.48 g[12] g[14] + 368.753 g[13] g[14] +
2968.09 g[14]^2 + 5144.74 g[1] g[15] - 3098.36 g[2] g[15] -
8326.81 g[7] g[15] - 5031.61 g[9] g[15] + 2493.13 g[10] g[15] -
7571.42 g[12] g[15] - 1060.92 g[13] g[15] - 3254.18 g[14] g[15] +
14354.7 g[15]^2 - 3546.54 g[2] g[16] - 2456.06 g[9] g[16] -
2453.47 g[11] g[16] - 1268.56 g[13] g[16] - 2418.14 g[14] g[16] +
4397.03 g[16]^2 + 323.904 g[1] g[17] - 356.019 g[2] g[17] -
19.8684 g[5] g[17] + 57.84 g[6] g[17] - 920.521 g[7] g[17] -
988.37 g[8] g[17] - 252.162 g[9] g[17] - 27.3935 g[10] g[17] +
247.476 g[11] g[17] - 220.29 g[12] g[17] - 134.28 g[13] g[17] -
245.28 g[14] g[17] + 1454.8 g[15] g[17] + 185.738 g[17]^2 +
563.582 g[1] g[18] + 7.82084 g[5] g[18] - 479.507 g[7] g[18] +
635.902 g[9] g[18] - 707.531 g[10] g[18] - 319.451 g[13] g[18] -
1201.33 g[14] g[18] - 1539.59 g[15] g[18] + 81.4226 g[17] g[18] +
903.201 g[18]^2 - 2779.46 g[1] g[19] - 1840.6 g[7] g[19] +
1934.22 g[9] g[19] - 4161.95 g[10] g[19] - 2098.78 g[11] g[19] -
4337.8 g[15] g[19] + 154.595 g[17] g[19] + 1374.56 g[18] g[19] +
4197.17 g[19]^2 - 63.1605 g[1] g[20] + 1452.64 g[2] g[20] -
273.535 g[9] g[20] + 335.505 g[10] g[20] + 336.133 g[13] g[20] +
239.703 g[20]^2 <= 1
When solving by FindMaximum
, I obtain FindMaximum::nrlnum
error
FindMaximum::nrlnum: The function value {0.414741 +0. I,0.195062 +0. I,0.122928 +0. I,0.374518 +0. I,0.270671 +0. I,<<10>>,0.419655 +0. I,-0.0193688+0. I,0.0753935 +0. I,0.227088 +0. I,0.0396516 -2.74433*10^-15 I} is not a list of real numbers with dimensions {20} at {g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15],g[16],g[17],g[18],g[19],g[20]} = {0.00477212,0.00441384,0.00539416,0.00485674,0.00539739,0.00556549,0.00511965,<<6>>,0.00483714,0.0050438,0.00465757,0.00573873,0.00521535,0.00454342,0.00461002}. >>
Complete energyConstraints
and the whole code is in the attachment. Any ideas how to go around? Using Mathematica 10.2.0 on Mac OS X
Attachments: