# Constraints and Tolerance

So I'm running NMaximize for optimizing a value and for constraints, I need the parameters to belong to a discrete set of elements. Basically, the constraint looks like,

And @@Table[{Subscript[x, i], Subscript[y, i]} \[Element] Table[Subscript[e, i, n], {i, 1, n}],{i, 1, k}]


,where {Subscript[x, i], Subscript[y, i]} are my parameters satisfying the constraint that they should belong to Table[Subscript[ex, i, n], {i, 1, n}]

But NMaximize do not consider this as a constraint. Then I changed the constraint to the convex hull of Table[Subscript[ex, i, n], {i, 1, n}] with an additional constraint to pick out the extreme points aka the vertices. Now my code looks like,

And @@ Table[{Subscript[x, i], Subscript[y, i]} \[Element]
ConvexHullMesh[Table[Subscript[ex, i, n], {i, 1, n}]] &&
Subscript[z, i] == 1/2 &&
Subscript[x, i]^2 + Subscript[y, i]^2 == Subscript[r, n]/2, {i, 1,
k}]


But, when I run this it outputs this error

Obtained solution does not satisfy the following constraints within
Tolerance -> 0.001

What do I do?

FULL CODE

Subscript[r, n_] := Sqrt[Sec[Pi/n]];
Subscript[w, i_,
n_] := {Subscript[r, n] Cos[2 Pi i/n],
Subscript[r, n] Sin[2 Pi i/n], 1};
Subscript[e, i_, n_] :=
1/2 {Subscript[r, n] Cos[(2 i - 1) Pi/n],
Subscript[r, n] Sin[(2 i - 1) Pi/n], 1};
Subscript[ex, i_, n_] :=
1/2 {Subscript[r, n] Cos[(2 i - 1) Pi/n],
Subscript[r, n] Sin[(2 i - 1) Pi/n]};
u = {0, 0, 1};
f = (u - #) &;
(*Factors={1,2,3,12,13,23,123}*)

Factors = Times @@@ Subsets[Transpose@Tuples[{1, -1}, 3], {1, 3}];
(*Rearrange*)
(*Rearrange the numbers in the RHS to obtain different \
combinations*)

Factors[[{1, 2, 3, 4, 5, 6, 7}]] = Factors[[{1, 2, 3, 4, 5, 6, 7}]];
Factors = Transpose[Factors];
Vec[j_] := {Subscript[x, j], Subscript[y, j], Subscript[z, j]};
AllParameters[k_] :=
Module[{i},
Flatten[Table[{Subscript[x, i], Subscript[y, i], Subscript[z,
i]}, {i, 1, k}]]];
AllConstraints[n_, k_] :=
Module[{i},
And @@ Table[{Subscript[x, i], Subscript[y, i]} \[Element]
ConvexHullMesh[Table[Subscript[ex, i, n], {i, 1, n}]] &&
Subscript[z, i] == 1/2 &&
Subscript[x, i]^2 + Subscript[y, i]^2 == Subscript[r, n]/2, {i,
1, k}]];

GPT[n_, k_] := Module[{ro, co, ve, i},
FunFactor = Factors[[1 ;; 8, 1 ;; k]] /. {1 -> Identity, -1 -> f};
vec = Table[Subscript[v,
i], {i, 1, k}] /. {Subscript[v, j_] -> Vec[j]};
vecs = Table[
Total[Table[FunFactor[[ro, co]][vec[[co]]], {co, 1, k}]], {ro, 1,
8}];
max = Total[
Table[Max[
Map[vecs[[ve]].# &, Table[Subscript[w, i, n], {i, 1, n}]]], {ve,
1, 8}]];
{time, out} =
Timing[NMaximize[{max, AllConstraints[n, k]}, AllParameters[k],
Print[out, out[[1]]/(k 8), "   ", time]; {time, out} =
Timing[NMaximize[{max, AllConstraints[n, k]}, AllParameters[k],
Method -> "DifferentialEvolution"]];
Print[out, out[[1]]/(k 8), "   ", time]; {time, out} =
Timing[NMaximize[{max, AllConstraints[n, k]}, AllParameters[k],
Method -> "SimulatedAnnealing"]];
Print[out, out[[1]]/(k 8), "   ", time];]

GPT[4, 7]

• Replace Subscript[w, i_, n_]  to w[i_,n_]` etc. maybe easy to handle this problem. – cvgmt Jan 28 at 23:57