在MATLAB中运行ga时,“运行优化时出错。输入参数不够”

时间:2017-10-29 14:16:59

标签: matlab optimization constraints

我正在使用以下目标函数进行优化:

function Length_Sum = objective_function( l1,l2,l3 )

Length_Sum = l1 + l2 + l3; 

end

使用下面给出的约束函数,constrint函数使用另一个函数来计算thetas的值,

function [c, ceq] = simple_constraint(l1,l2,l3)

c(1) = l3^2 + 200*l3*cos(30) + 10000 - (l1 + l2)^2;
c(2) = (100- l3*cos(30))^2 + (100*sin(30))^2 - (l1-l2)^2;

thetas = inverse_kinematics(l1,l2,l3);

c(3) = thetas(4,1) - 160;
c(4) = thetas(4,2) - 160;
c(5) = thetas(4,3) - 160;

c(6) = 20 - thetas(4,1);
c(7) = 20 - thetas(4,2);
c(8) = 20 - thetas(4,3);

c(9) = thetas(5,1) - 340;
c(10) = thetas(5,2) - 340;
c(11) = thetas(5,3) - 340;

c(12) = 200 - thetas(5,1);
c(13) = 200 - thetas(5,2);
c(14) = 200 - thetas(5,3);

c(15) = thetas(6,1) - 340;
c(16) = thetas(6,2) - 340;
c(17) = thetas(6,3) - 340;

c(18) = 200 - thetas(6,1);
c(19) = 200 - thetas(6,2);
c(20) = 200 - thetas(6,3);


ceq = [];

end

约束函数调用的函数如下:

function thetas = inverse_kinematics(l1,l2,l3)

    x = 100;
    y = 0;
    phi = 210*pi/180:60*pi/180:330*pi/180;

    x1 = x - (l3*cos(phi));
    y1 = y - (l3*sin(phi));
    a = sqrt(x1.^2 + y1.^2);
    y2 = -y1./a;
    x2 = -x1./a;
    gamma = atan2(y2,x2);
    c = (- x1.^2 - y1.^2 - l1^2 + l2^2)./(2*l1*a);
    d = acos(c);

    theta1 = gamma + d;
    if theta1 < 0
        theta1 = theta1 + 2*pi;
    end

    theta4 = gamma - d;
    if theta4 < 0
       theta4 = theta4 + 2*pi;
    end

    e = (y1 - l1*sin(theta1))/l2;
    f = (x1 - l1*cos(theta1))/l2;

    theta2 = atan2(e,f) - theta1;
    if theta2 < 0
        theta2 = theta2 + 2*pi;
    end

    g = (y1 - l1*sin(theta4))/l2;
    h = (x1 - l1*cos(theta4))/l2;

    theta5 = atan2(g,h) - theta4;
    if theta5 < 0
        theta5 = theta5 + 2*pi;
    end

    theta3 = (phi)- (theta1 + theta2);
    if theta3 < 0
        theta3 = theta3 + 2*pi;
    end

    theta6 = (phi)- (theta4 + theta5);
    if theta6 < 0
        theta6 = theta6 + 2*pi;
    end

    thetas = [theta1;theta2;theta3;theta4;theta5;theta6].*180/pi;

end

使用ga工具箱运行此代码后,下限[20 20 20]和上限[100 100 100]并将rest参数设置为默认值,我收到“运行优化时出错。输入参数不足”错误。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

ga接受具有一个向量形式的输入的约束函数,其中元素的数量对应于约束变量的数量。你应该改变

function [c, ceq] = simple_constraint(l1,l2,l3)

function [c, ceq] = simple_constraint(input)
l1 = input(1);
l2 = input(2);
l3 = input(3);

下次,我建议您尝试使用上述工具箱中的File-&gt; Generate Code ...选项。然后,您可以从Matlab窗口更轻松地进行调试。

您的计划还有另一个问题。尝试运行inverse_kinematics(20,20,20)。它在第29行失败了,但我不会在这里详细说明,因为这不是问题的一部分。