Error happen when doing optimization by using "surrogateopt"

2 ビュー (過去 30 日間)
HUNG JUI CHIU
HUNG JUI CHIU 2021 年 4 月 22 日
回答済み: Stephan 2021 年 4 月 22 日
I am trying to do optimization by using "surrogateopt" function.
I got an error "Objective function must return a scalar value".
And I couldn't find the problem.
clear
close all
clc
h = 0.01;
t = 0:h:10;
x = [0 0]';
for i = 1:1001
x1(i) = x(1);
x2(i) = x(2);
if x1(i) >0
a = pi/3;
elseif x1(i)<=0
a = -pi/3;
end
A = [cos(a) sin(a);
sin(a) cos(a)];
B = [0 1]';
intcon = 1;
lb = -1;
ub = 1;
obj =@(u) fun(A, x, B, u);
u = surrogateopt(obj, lb, ub, intcon);
x = fun(A, x, B, u);
end
figure
plot(x1, x2)
grid on
function f1 = fun(A, x, B, u)
f1 = 0.8*A*x+B*u;
end

採用された回答

Stephan
Stephan 2021 年 4 月 22 日
f1 is a 2x1 vector - the objective of an optimization has to be a scalar. Thats the error. You need a criterion that expresses the success of your optimization as a scalar.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurrogate Optimization についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by