forum.alglib.net
http://forum.alglib.net/

minlmoptimize invalid use
http://forum.alglib.net/viewtopic.php?f=2&t=3874
Page 1 of 1

Author:  Oliver [ Fri Dec 14, 2018 9:35 am ]
Post subject:  minlmoptimize invalid use

Dear all,

I'm trying to use the Levenberg Marquardt algorithm. If I compile, I get the error "invalid use of non-static member" in the line "minlmoptimize(state, problemMeasurementEquipmentPositon);". First thought, no problem, I make the method problemMeasurementEquipmentPositon(...) static. This would work, if the called methods within this method would be static too, but they aren't. I have never had such a problem and I don't know how to solve it. I would be very grateful if somebody could help. Thanks.

Code:
void RobotProblemSolver::solveMeasurementEquipment(){

        int equations=para.getNumberOfMeasurements()*3;

        real_1d_array x = "[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]";
        real_1d_array bndl = "[-1,-1,-1,-10,-1,-1,-1,-10,-1,-1,-1,-10,-0.1,-0.1,-0.1]";
        real_1d_array bndu = "[+1,+1,+1,+10,+1,+1,+1,+10,+1,+1,+1,+10,+0.1,+0.1,+0.1]";
        double epsx = 0.0000000001;
        ae_int_t maxits = 0;
        minlmstate state;
        minlmreport rep;

        minlmcreatev(equations, x, 0.0001, state);
        minlmsetbc(state, bndl, bndu);
        minlmsetcond(state, epsx, maxits);
        minlmoptimize(state, problemMeasurementEquipmentPositon);
        minlmresults(state, x, rep);

        Transformation t(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],0,0,0,1);

        std::cout << t.toString() << std::endl;
        std::cout << "Tool: "<<x[12]<<" "<<x[13]<<" "<<x[14]<<std::endl;


}

void RobotProblemSolver::problemMeasurementEquipmentPositon(const real_1d_array &x, real_1d_array &fi, void *ptr){

    double phi[6];
    double coordinates[3];
    Transformation pose;
    Transformation toolTrans(1,0,0,x[12],
                             0,1,0,x[13],
                             0,0,1,x[14],
                             0,0,0,1);
    Tool tool(toolTrans);

    for(int i=0; i<para.getNumberOfMeasurements(); i++){

        para.getMeasure(i,phi,coordinates);
        robotModel.directKinematics(phi,tool,pose);

        fi[i*3+0]=coordinates[0]*x[0]+coordinates[1]*x[1]+coordinates[2]*x[2]+x[3]-pose[3];
        fi[i*3+1]=coordinates[0]*x[4]+coordinates[1]*x[5]+coordinates[2]*x[6]+x[7]-pose[7];
        fi[i*3+2]=coordinates[0]*x[8]+coordinates[1]*x[9]+coordinates[2]*x[10]+x[11]-pose[11];
    }

}

Page 1 of 1 All times are UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/