Есть ли способ найти неизвестную переменную вместо решения? - PullRequest
0 голосов
/ 20 июня 2019

Я пишу код для оптимизации для решения проблемы в форме min_x f(x,c) s.t. sum(x)=1 and g(x,c)=1, где x - вектор, а c - функция от x, такая, что c(x) - это константа, когда x является фиксированным. Действительно, g(x,c) принимает следующую форму

n=5; N=1000000; idx = 1:1:n; df=4; theta=2; alpha=2.4;
central_Simulation_Points=mvtrnd(eyes(n),df,N);
x=sym('x_%d',[n,1]); syms c
g(x,c)=1./N.*sum((theta.*(alpha-1).*central_Simulation_Points*x).^2+c).^(1./(alpha-1)))==1;
Constraint_equ = solve(g(x,c), c);
Constraint_equ_handle = matlabFunction(Constraint_equ);

Использование solve для выражения c в терминах x, тогда как matlabFunction заменяет символическую функцию на дескриптор функции для ввода. Затем я определяю целевую функцию obj_fun=@(x)f(x,c(x)). Целевая функция для оптимизации

(alpha-1)/alpha*sum_{i=1}^N[(theta*(alpha-1)*V(x,Xi)+c)^(1/(alpha-1))*V(x,Xi)]+c/(theta*alpha*(1-alpha))

V(x,Xi) - любая функция. Я использую (x^{T}Xi)^2. Си - это i-й ряд central_Simulation_Points.

Когда я считаю время, Equ = 1./N.*sum((theta.*(alpha-1).*central_Simulation_Points*x).^2+c).^(1./(alpha-1)))==1; занимает 203 секунды, но кажется, что Constraint_equ = solve(Equ, c); никогда не останавливает программу. Интересно, можно ли использовать другие методы вместо

?
Constraint_equ = solve(Equ, c);
Constraint_equ_handle = matlabFunction(Constraint_equ);

Есть ли способы найти c в терминах x или какие-либо способы изменить код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...