如何使用 Mosek 求解器解决这个 MINLP 问题?用matlab实现

问题描述 投票:0回答:0

enter image description here

我想用 MOSEK 求解器来解决这个问题,但是不行。

x_num = 36;  
xd = rand * 3000;  
yd = rand * 3000; 
x = initialize_user(x_num);
M = 1e9;
u = zeros(x_num,1);
for i =1:x_num
    if ((x(i,1)-xd)^2+(x(i,2)-yd)^2) <= R1^2
    u(i) = 1;
    end 
end

R1 = 100;  
M = 1e9;  

clear prob;
num_variables = 2 + x_num;  
prob.c = [0, 0, u'];  

num_constraints = x_num;
prob.a = zeros(num_constraints, num_variables);

for i = 1:x_num
  
    prob.a(i, 2+i) = 1;  
    prob.a(i, 1) = -2 * x(i, 1);  
    prob.a(i, 2) = -2 * x(i, 2); 
    prob.a(i, 3+x_num+i) = -1; 
    prob.buc(i) = -R1^2 - M;
end


prob.blx = [0; 0; zeros(x_num, 1)];  
prob.bux = [3000; 30000; ones(x_num, 1)]; 


clear param;
param.MSK_IPAR_INTPNT_MAX_ITERATIONS = 200; 
[r, res] = mosekopt('maximize', prob, param);

*** 错误(1200):prob.c 的长度错误

Mosek 错误:MSK_RES_ERR_IN_ARGUMENT(函数参数不正确。)

prob的定义可能有问题,但不知道如何修改。请帮我解决这个问题,或者给我一些建议

prob的定义可能有问题,但不知道如何修改。请帮我解决这个问题,或者给我一些建议

matlab solver
© www.soinside.com 2019 - 2024. All rights reserved.