Hmmmm.... you're right but i think this is not the source of my problem. I just did the code without any classes stuf, so just plain procedural and it didn't throw any errors. So it seems like I can not pass the reference to the objective function the right way when i use everything in a class.
Well, looks like this is going to become much more complicated then I hoped regards Elias 2010/10/29 Waters, Anthony <[email protected]>: > But the constraint is also defined with a VOID pointer: > > double myvconstraint(const std::vector<double> &x, std::vector<double> &grad, > void *data) > > > Regards, > Anthony Waters > KBC Energy Services > Email: [email protected] > Tel: +44 (0)1606 815100 > > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Elias Breunig > Sent: 29 October 2010 11:48 > To: Waters, Anthony; [email protected] > Subject: Re: [NLopt-discuss] Problem with set_min_objective > > Thanks for your reply, > > You're right concerning the constraint function, but for the function > to optimize, the tutorial (and the headers) define it with a void > pointer. > That's why i use the type_cast. Howeve I tried your suggestion but it > didn't change a thing :-( > > double myfunc(unsigned n, const double *x, double *grad, void *my_func_data) > > > Elias > > 2010/10/29 Waters, Anthony <[email protected]>: >> In the C++ tutorial you use "&data[0]" to send data to the constraint >> function: >> >> opt.add_inequality_constraint(myvconstraint, &data[0], 1e-8); >> >> So, I'm guessing that your equivalent should be : >> >> opt.set_min_objective(&SurfLocator::FunctionWrapperNLopt, &P[0]); >> >> Does that make any sense? >> >> >> Regards, >> Anthony Waters >> KBC Energy Services >> Email: [email protected] >> Tel: +44 (0)1606 815100 >> >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Elias >> Breunig >> Sent: 29 October 2010 11:31 >> To: [email protected] >> Subject: [NLopt-discuss] Problem with set_min_objective >> >> Hello, >> >> I'am new to using nlopt an ran in something that i hope is just a >> typical newbie problem. >> >> (c++) >> >> I want to use nlopt inside a object that acts as nearestneighbour >> locator on an parametric manifold. >> >> therefore i defined within my class SurfLocator >> >> - a objective function >> >> double SurfLocator::FunctionWrapperNLopt(const std::vector<double> &x, >> std::vector<double> &grad, void *my_func_data) >> { >> double uvw[] = {x[0],x[1],0}; >> double Pt[3]; >> double Duvw[9]; >> this->Surf->Evaluate(uvw,Pt,Duvw); >> >> return >> pow(Pt[0]-reinterpret_cast<double*>(my_func_data)[0],2)+ >> >> pow(Pt[1]-reinterpret_cast<double*>(my_func_data)[1],2)+ >> >> pow(Pt[2]-reinterpret_cast<double*>(my_func_data)[2],2); >> } >> >> This function generates the return value (distance between point and >> Surface Point) for nlopt by calling a function of the manifold object >> with the parameters x >> >> - and a routine to handle nlopt that gets a point to find the nearest >> neighbour to as input and returns the nearest neighbour (not >> implemented here) >> >> >> void SurfLocator::FindNearestPointNLopt(double P[3], double OutPoint[3]) >> { >> nlopt::opt opt(nlopt::LD_MMA, 2); >> >> std::vector<double> lb(2); >> lb[0] = -HUGE_VAL; lb[1] = 0; >> opt.set_lower_bounds(lb); >> >> opt.set_min_objective(&SurfLocator::FunctionWrapperNLopt, >> reinterpret_cast<void*>(P)); >> >> opt.set_xtol_rel(1e-4); >> >> std::vector<double> x(2); >> x[0] = 0; x[1] = 0; >> double minf; >> nlopt::result result = opt.optimize(x, minf); >> } >> >> >> Everything seems fine so far but when i try to compile (Visual Studio >> 2010 Ex) i get an error stating that the >> >> compiler cannot match the arguments in the call of >> opt.set_min_objective to any of its overloadings. >> >> So whats wrong here... For me it looks quite like the tutorial on the >> nlopt webpage, but obviously this is not the case! >> >> >> Thanks for any help >> >> Elias >> >> _______________________________________________ >> NLopt-discuss mailing list >> [email protected] >> http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss >> This e-mail is confidential and intended only for the individual(s) to whom >> it is addressed. If you or your organisation is not an intended recipient of >> this e-mail, please notify the sender by replying and do not read or >> disseminate its information. Please delete all copies from your system. KBC >> is liable neither for the proper or complete transmission of the information >> contained in this communication nor for any delay in its receipt. Opinions, >> conclusions and other information in this message and attachments that do >> not relate to the official business of KBC are neither given nor endorsed by >> it. Even though the Webroot Virus Centre has checked this message for all >> known viruses, you should carry out your own virus checks before opening any >> attachments. Thank you for your co-operation. www.kbcat.com > > _______________________________________________ > NLopt-discuss mailing list > [email protected] > http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss > _______________________________________________ NLopt-discuss mailing list [email protected] http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss
