- r1=reg1(i)
- reg1(1) = 11
- w only has 7 elements
Facing error in the optimization part. Kindly suggest solution
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
clc;
clear;
a=[241.0, 301.0, 261.0, 221.0, 281.0, 361.0, 401.0, 361.0, 301.0, 321.0, 221.0, 281.0, 201.0, 201.0, 261.0, 141.0, 181.0, 201.0, 161.0, 121.0, 161.0, 221.0, 141.0, 161.0, 201.0, 221.0, 221.0, 201.0, 221.0, 221.0, 241.0, 301.0, 281.0, 221.0];
b=[130.0, 150.0, 190.0, 170.0, 210.0, 130.0, 170.0, 230.0, 210.0, 190.0, 230.0, 270.0, 290.0, 330.0, 330.0, 150.0, 130.0, 150.0, 150.0, 170.0, 190.0, 210.0, 230.0, 230.0, 70.0, 90.0, 110.0, 110.0, 130.0, 50.0, 110.0, 110.0, 70.0, 70.0];
lb_w=[1e-04, 1e-04, 1e-04,1e-04, 1e-04, 1e-04,1e-04];
ub_w=[10000,10000,10000,10000,10000,10000,10000];
reg1=[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11];
reg2=[10,10,10,10,10,11,11,11,11,11,12,12,12,12,12,17,17,17,17,18,18,18,18,18,38,38,38,38,38,39,39,39,39,39];
lb_x=[283.6939,203.9050,179.9683,134.7546,100.1794, 177.3087,207.4512];
ub_x=[419.3351 313.8364 296.1055 210.9974 231.3879 242.9129 325.3615];
lb_y=[123.6309 109.4000 209.0163 122.7415 153.8715 53.3659 19.5675];
ub_y=[259.7138 215.2423 360.2195 165.4341 240.1463 144.0878 138.7512];
initial_x = zeros(1, 7);
initial_y = zeros(1, 7);
initial_w = zeros(1, 7);
disp(['initial_x: ', num2str(initial_x)])
% Concatenating initial guesses, lower bounds, and upper bounds
%initialVars = [initial_x, initial_y, initial_w];
initialVars = [lb_x, lb_y, lb_w];
lb = [lb_x, lb_y, lb_w];
ub = [ub_x, ub_y, ub_w];
disp(lb);
disp(ub);
% Optimization options
options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'interior-point');
% Defining the objective function
objFun = @(vars) objective(vars, a, b, reg1, reg2);
% Run optimization
[optimalVars, fval] = fmincon(objFun, initialVars, [], [], [], [], lb, ub, [], options);
% Extract optimal x, y, and w
optimal_x = optimalVars(1:7);
optimal_y = optimalVars(8:14);
optimal_w = optimalVars(15:end);
% Display results
disp('Optimal x:');
disp(optimal_x);
disp('Optimal y:');
disp(optimal_y);
disp('Optimal w:');
disp(optimal_w);
disp('Objective function value:');
disp(fval);
hold on
scatter(a,b,"blue","filled")
scatter(optimal_x, optimal_y, '*','red');
grid on;
hold off
% Objective function
function f = objective(vars, a, b, reg1, reg2)
x = vars(1:7);
y = vars(8:14);
w = vars(15:end);
f = 0;
for i = 1:a(1:5)
r1=reg1(i);
p(i)=((x(r1)-a(i))^2 + (y(r1)-b(i))^2)-abs(w(r1));
for j=1:a(6:34)
r2 = reg2(j);
q(j)=((x(r2)-a(j))^2 + (y(r2)-b(j))^2)-abs(w(r2));
f = f + p(i)-q(j);
end
end
end
error: Index exceeds the number of array elements. Index must not exceed 7.
Error in grid_weight>objective (line 106)
p(i)=((x(r1)-a(i))^2 + (y(r1)-b(i))^2)-abs(w(r1));
Error in grid_weight>@(vars)objective(vars,a,b,reg1,reg2) (line 71)
objFun = @(vars) objective(vars, a, b, reg1, reg2);
Error in fmincon (line 568)
initVals.f = feval(funfcn{3},X,varargin{:});
Error in grid_weight (line 74)
[optimalVars, fval] = fmincon(objFun, initialVars, [], [], [], [], lb, ub, [], options);
0 commentaires
Réponses (1)
Cris LaPierre
le 27 Fév 2024
You have an indexing issue. Namely, w(r1).
reg1=[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11];
w = [1e-04, 1e-04, 1e-04,1e-04, 1e-04, 1e-04,1e-04]
r1 = reg1(1)
w(r1)
You need to adjust your code so that your index does not exceed the length of your vector.
1 commentaire
Cris LaPierre
le 27 Fév 2024
Also note that the following line of code is likely not doing what you think it is doing
for i = 1:a(1:5)
The end result will be the same as if you had written for i = 1:a(1)
Voir également
Catégories
En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!