diff options
author | Harpreet | 2016-09-03 00:34:27 +0530 |
---|---|---|
committer | Harpreet | 2016-09-03 00:34:27 +0530 |
commit | 4b64cf486f5c999fd8167758cae27839f3b50848 (patch) | |
tree | d9d06639fb7fa61aef59be0363655e4747105ec7 /build/cpp | |
parent | d19794fb80a271a4c885ed90f97cfc12baa012f2 (diff) | |
download | FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.tar.gz FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.tar.bz2 FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.zip |
Structure updated and intqpipopt files added
Diffstat (limited to 'build/cpp')
-rw-r--r-- | build/cpp/cpp_intfminbnd.cpp | 172 | ||||
-rw-r--r-- | build/cpp/cpp_intfmincon.cpp | 189 | ||||
-rw-r--r-- | build/cpp/cpp_intfminunc.cpp | 174 | ||||
-rw-r--r-- | build/cpp/minbndTMINLP.hpp | 114 | ||||
-rw-r--r-- | build/cpp/minconTMINLP.hpp | 124 | ||||
-rw-r--r-- | build/cpp/minuncTMINLP.hpp | 113 | ||||
-rw-r--r-- | build/cpp/sci_iofunc.cpp | 333 | ||||
-rw-r--r-- | build/cpp/sci_iofunc.hpp | 25 | ||||
-rw-r--r-- | build/cpp/sci_minbndTMINLP.cpp | 218 | ||||
-rw-r--r-- | build/cpp/sci_minconTMINLP.cpp | 324 | ||||
-rw-r--r-- | build/cpp/sci_minconTMINLP.cpp~ | 324 | ||||
-rw-r--r-- | build/cpp/sci_minuncTMINLP.cpp | 237 |
12 files changed, 0 insertions, 2347 deletions
diff --git a/build/cpp/cpp_intfminbnd.cpp b/build/cpp/cpp_intfminbnd.cpp deleted file mode 100644 index 4914111..0000000 --- a/build/cpp/cpp_intfminbnd.cpp +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#include "CoinPragma.hpp" -#include "CoinTime.hpp" -#include "CoinError.hpp" - -#include "BonOsiTMINLPInterface.hpp" -#include "BonIpoptSolver.hpp" -#include "minbndTMINLP.hpp" -#include "BonCbc.hpp" -#include "BonBonminSetup.hpp" - -#include "BonOACutGenerator2.hpp" -#include "BonEcpCuts.hpp" -#include "BonOaNlpOptim.hpp" - -#include "sci_iofunc.hpp" -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> - -int cpp_intfminbnd(char *fname) -{ - using namespace Ipopt; - using namespace Bonmin; - - CheckInputArgument(pvApiCtx, 8, 8); - CheckOutputArgument(pvApiCtx, 3, 3); - - // Input arguments - Number *integertolerance=NULL, *maxnodes=NULL, *allowablegap=NULL, *cputime=NULL,*max_iter=NULL, *lb = NULL, *ub = NULL; - static unsigned int nVars = 0; - unsigned int temp1 = 0,temp2 = 0, iret = 0; - int x0_rows, x0_cols,intconSize; - Number *intcon = NULL,*options=NULL, *ifval=NULL; - - // Output arguments - Number *fX = NULL, ObjVal=0,iteration=0,cpuTime=0,fobj_eval=0; - Number dual_inf, constr_viol, complementarity, kkt_error; - int rstatus = 0; - - if(getDoubleMatrixFromScilab(4, &x0_rows, &x0_cols, &lb)) - { - return 1; - } - - if(getDoubleMatrixFromScilab(5, &x0_rows, &x0_cols, &ub)) - { - return 1; - } - - // Getting intcon - if (getDoubleMatrixFromScilab(6,&intconSize,&temp2,&intcon)) - { - return 1; - } - - //Initialization of parameters - nVars=x0_rows; - temp1 = 1; - temp2 = 1; - - //Getting parameters - if (getFixedSizeDoubleMatrixInList(7,2,temp1,temp2,&integertolerance)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(7,4,temp1,temp2,&maxnodes)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(7,6,temp1,temp2,&cputime)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(7,8,temp1,temp2,&allowablegap)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(7,10,temp1,temp2,&max_iter)) - { - return 1; - } - - SmartPtr<minbndTMINLP> tminlp = new minbndTMINLP(nVars,lb,ub,intconSize,intcon); - - BonminSetup bonmin; - bonmin.initializeOptionsAndJournalist(); - - bonmin.options()->SetStringValue("mu_oracle","loqo"); - bonmin.options()->SetNumericValue("bonmin.integer_tolerance", *integertolerance); - bonmin.options()->SetIntegerValue("bonmin.node_limit", (int)*maxnodes); - bonmin.options()->SetNumericValue("bonmin.time_limit", *cputime); - bonmin.options()->SetNumericValue("bonmin.allowable_gap", *allowablegap); - bonmin.options()->SetIntegerValue("bonmin.iteration_limit", (int)*max_iter); - - //Now initialize from tminlp - bonmin.initialize(GetRawPtr(tminlp)); - - //Set up done, now let's branch and bound - try { - Bab bb; - bb(bonmin);//process parameter file using Ipopt and do branch and bound using Cbc - } - catch(TNLPSolver::UnsolvedError *E) { - Scierror(999, "\nIpopt has failed to solve the problem!\n"); - } - catch(OsiTMINLPInterface::SimpleError &E) { - Scierror(999, "\nFailed to solve a problem!\n"); - } - catch(CoinError &E) { - Scierror(999, "\nFailed to solve a problem!\n"); - } - rstatus=tminlp->returnStatus(); - - if(rstatus==0 ||rstatus== 3) - { - fX = tminlp->getX(); - ObjVal = tminlp->getObjVal(); - if (returnDoubleMatrixToScilab(1, nVars, 1, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - - } - else - { - if (returnDoubleMatrixToScilab(1, 0, 0, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - - } - - return 0; - } -} - diff --git a/build/cpp/cpp_intfmincon.cpp b/build/cpp/cpp_intfmincon.cpp deleted file mode 100644 index d921128..0000000 --- a/build/cpp/cpp_intfmincon.cpp +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#include "CoinPragma.hpp" -#include "CoinTime.hpp" -#include "CoinError.hpp" - -#include "BonOsiTMINLPInterface.hpp" -#include "BonIpoptSolver.hpp" -#include "minconTMINLP.hpp" -#include "BonCbc.hpp" -#include "BonBonminSetup.hpp" - -#include "BonOACutGenerator2.hpp" -#include "BonEcpCuts.hpp" -#include "BonOaNlpOptim.hpp" - -#include "sci_iofunc.hpp" -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> - -int cpp_intfmincon(char *fname) -{ - using namespace Ipopt; - using namespace Bonmin; - - CheckInputArgument(pvApiCtx, 13, 13); - CheckOutputArgument(pvApiCtx, 3, 3); - - // Input arguments - Number *integertolerance=NULL, *maxnodes=NULL, *allowablegap=NULL, *cputime=NULL,*max_iter=NULL; - Number *x0 = NULL, *lb = NULL, *ub = NULL,*conLb = NULL, *conUb = NULL,*LC = NULL; - static unsigned int nVars = 0,nCons = 0; - unsigned int temp1 = 0,temp2 = 0, iret = 0; - int x0_rows, x0_cols,intconSize; - Number *intcon = NULL,*options=NULL, *ifval=NULL; - - // Output arguments - Number *fX = NULL, ObjVal=0,iteration=0,cpuTime=0,fobj_eval=0; - Number dual_inf, constr_viol, complementarity, kkt_error; - int rstatus = 0; - - if(getDoubleMatrixFromScilab(6, &nVars, &x0_cols, &x0)) - { - return 1; - } - - if(getDoubleMatrixFromScilab(7, &x0_rows, &x0_cols, &lb)) - { - return 1; - } - - if(getDoubleMatrixFromScilab(8, &x0_rows, &x0_cols, &ub)) - { - return 1; - } - - if(getDoubleMatrixFromScilab(9, &nCons, &x0_cols, &conLb)) - { - return 1; - } - - if(getDoubleMatrixFromScilab(10, &x0_rows, &x0_cols, &conUb)) - { - return 1; - } - - // Getting intcon - if (getDoubleMatrixFromScilab(11,&intconSize,&temp2,&intcon)) - { - return 1; - } - - if (getDoubleMatrixFromScilab(13,&temp1,&temp2,&LC)) - { - return 1; - } - - //Initialization of parameters - temp1 = 1; - temp2 = 1; - - //Getting parameters - if (getFixedSizeDoubleMatrixInList(12,2,temp1,temp2,&integertolerance)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(12,4,temp1,temp2,&maxnodes)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(12,6,temp1,temp2,&cputime)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(12,8,temp1,temp2,&allowablegap)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(12,10,temp1,temp2,&max_iter)) - { - return 1; - } - - SmartPtr<minconTMINLP> tminlp = new minconTMINLP(nVars,x0,lb,ub,(unsigned int)LC,nCons,conLb,conUb,intconSize,intcon); - - BonminSetup bonmin; - bonmin.initializeOptionsAndJournalist(); - bonmin.options()->SetStringValue("mu_oracle","loqo"); - bonmin.options()->SetIntegerValue("bonmin.print_level",5); - bonmin.options()->SetNumericValue("bonmin.integer_tolerance", *integertolerance); - bonmin.options()->SetIntegerValue("bonmin.node_limit", (int)*maxnodes); - bonmin.options()->SetNumericValue("bonmin.time_limit", *cputime); - bonmin.options()->SetNumericValue("bonmin.allowable_gap", *allowablegap); - bonmin.options()->SetIntegerValue("bonmin.iteration_limit", (int)*max_iter); - - //Now initialize from tminlp - bonmin.initialize(GetRawPtr(tminlp)); - - //Set up done, now let's branch and bound - try { - Bab bb; - bb(bonmin);//process parameter file using Ipopt and do branch and bound using Cbc - } - catch(TNLPSolver::UnsolvedError *E) { - } - catch(OsiTMINLPInterface::SimpleError &E) { - } - catch(CoinError &E) { - } - rstatus=tminlp->returnStatus(); - - if(rstatus==0 ||rstatus== 3) - { - fX = tminlp->getX(); - ObjVal = tminlp->getObjVal(); - if (returnDoubleMatrixToScilab(1, nVars, 1, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - - } - else - { - if (returnDoubleMatrixToScilab(1, 0, 0, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - - } - - return 0; - } -} - diff --git a/build/cpp/cpp_intfminunc.cpp b/build/cpp/cpp_intfminunc.cpp deleted file mode 100644 index 233ead3..0000000 --- a/build/cpp/cpp_intfminunc.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#include "CoinPragma.hpp" -#include "CoinTime.hpp" -#include "CoinError.hpp" - -#include "BonOsiTMINLPInterface.hpp" -#include "BonIpoptSolver.hpp" -#include "minuncTMINLP.hpp" -#include "BonCbc.hpp" -#include "BonBonminSetup.hpp" - -#include "BonOACutGenerator2.hpp" -#include "BonEcpCuts.hpp" -#include "BonOaNlpOptim.hpp" - -#include "sci_iofunc.hpp" -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> - -int cpp_intfminunc(char *fname) -{ - using namespace Ipopt; - using namespace Bonmin; - - CheckInputArgument(pvApiCtx, 8, 8); // We need total 12 input arguments. - CheckOutputArgument(pvApiCtx, 3, 3); // 3 output arguments - - //Function pointers, input matrix(Starting point) pointer, flag variable - int* funptr=NULL; - double* x0ptr=NULL; - - // Input arguments - Number *integertolerance=NULL, *maxnodes=NULL, *allowablegap=NULL, *cputime=NULL,*max_iter=NULL; - static unsigned int nVars = 0,nCons = 0; - unsigned int temp1 = 0,temp2 = 0, iret = 0; - int x0_rows, x0_cols; - double *intcon = NULL,*options=NULL, *ifval=NULL; - int intconSize; - - // Output arguments - double *fX = NULL, ObjVal=0,iteration=0,cpuTime=0,fobj_eval=0; - double dual_inf, constr_viol, complementarity, kkt_error; - int rstatus = 0; - int int_fobj_eval, int_constr_eval, int_fobj_grad_eval, int_constr_jac_eval, int_hess_eval; - - //x0(starting point) matrix from scilab - if(getDoubleMatrixFromScilab(4, &x0_rows, &x0_cols, &x0ptr)) - { - return 1; - } - - nVars=x0_rows; - - // Getting intcon - if (getDoubleMatrixFromScilab(5,&intconSize,&temp2,&intcon)) - { - return 1; - } - - temp1 = 1; - temp2 = 1; - - //Getting parameters - if (getFixedSizeDoubleMatrixInList(6,2,temp1,temp2,&integertolerance)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(6,4,temp1,temp2,&maxnodes)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(6,6,temp1,temp2,&cputime)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(6,8,temp1,temp2,&allowablegap)) - { - return 1; - } - if (getFixedSizeDoubleMatrixInList(6,10,temp1,temp2,&max_iter)) - { - return 1; - } - - SmartPtr<minuncTMINLP> tminlp = new minuncTMINLP(nVars, x0ptr, intconSize, intcon); - - BonminSetup bonmin; - bonmin.initializeOptionsAndJournalist(); - - // Here we can change the default value of some Bonmin or Ipopt option - bonmin.options()->SetStringValue("mu_oracle","loqo"); - bonmin.options()->SetNumericValue("bonmin.integer_tolerance", *integertolerance); - bonmin.options()->SetIntegerValue("bonmin.node_limit", (int)*maxnodes); - bonmin.options()->SetNumericValue("bonmin.time_limit", *cputime); - bonmin.options()->SetNumericValue("bonmin.allowable_gap", *allowablegap); - bonmin.options()->SetIntegerValue("bonmin.iteration_limit", (int)*max_iter); - - //Now initialize from tminlp - bonmin.initialize(GetRawPtr(tminlp)); - - //Set up done, now let's branch and bound - try { - Bab bb; - bb(bonmin);//process parameter file using Ipopt and do branch and bound using Cbc - } - catch(TNLPSolver::UnsolvedError *E) { - //There has been a failure to solve a problem with Ipopt. - Scierror(999, "\nIpopt has failed to solve the problem!\n"); - } - catch(OsiTMINLPInterface::SimpleError &E) { - Scierror(999, "\nFailed to solve a problem!\n"); - } - catch(CoinError &E) { - Scierror(999, "\nFailed to solve a problem!\n"); - } - rstatus=tminlp->returnStatus(); - if(rstatus==0 ||rstatus== 3) - { - fX = tminlp->getX(); - ObjVal = tminlp->getObjVal(); - if (returnDoubleMatrixToScilab(1, nVars, 1, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - - } - else - { - if (returnDoubleMatrixToScilab(1, 0, 0, fX)) - { - return 1; - } - - if (returnDoubleMatrixToScilab(2, 1, 1, &ObjVal)) - { - return 1; - } - - if (returnIntegerMatrixToScilab(3, 1, 1, &rstatus)) - { - return 1; - } - } - - return 0; - } -} - diff --git a/build/cpp/minbndTMINLP.hpp b/build/cpp/minbndTMINLP.hpp deleted file mode 100644 index 581d5ce..0000000 --- a/build/cpp/minbndTMINLP.hpp +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#ifndef minbndTMINLP_HPP -#define minbndTMINLP_HPP - -#include "BonTMINLP.hpp" -#include "IpTNLP.hpp" -#include "call_scilab.h" - -using namespace Ipopt; -using namespace Bonmin; - -class minbndTMINLP : public TMINLP -{ - private: - - Index numVars_; //Number of input variables - - Index intconSize_; - - Number *lb_= NULL; //lb_ is a pointer to a matrix of size of 1*numVars_ with lower bound of all variables. - - Number *ub_= NULL; //ub_ is a pointer to a matrix of size of 1*numVars_ with upper bound of all variables. - - Number *finalX_= NULL; //finalX_ is a pointer to a matrix of size of 1*numVars_ with final value for the primal variables. - - Number finalObjVal_; //finalObjVal_ is a scalar with the final value of the objective. - - Number *intcon_ = NULL; - - int status_; //Solver return status - minbndTMINLP(const minbndTMINLP&); - minbndTMINLP& operator=(const minbndTMINLP&); - -public: - // Constructor - minbndTMINLP(Index nV, Number *lb, Number *ub, Index intconSize, Number *intcon):numVars_(nV),lb_(lb),ub_(ub),intconSize_(intconSize),intcon_(intcon),finalX_(0),finalObjVal_(1e20){ } - - /** default destructor */ - virtual ~minbndTMINLP(); - - virtual bool get_variables_types(Index n, VariableType* var_types); - - virtual bool get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types); - - virtual bool get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types); - - /** Method to return some info about the nlp */ - virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, - Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style); - - /** Method to return the bounds for my problem */ - virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, - Index m, Number* g_l, Number* g_u); - - /** Method to return the starting point for the algorithm */ - virtual bool get_starting_point(Index n, bool init_x, Number* x, - bool init_z, Number* z_L, Number* z_U, - Index m, bool init_lambda, - Number* lambda); - - /** Method to return the objective value */ - virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); - - /** Method to return the gradient of the objective */ - virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); - - /** Method to return the constraint residuals */ - virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); - - /** Method to return: - * 1) The structure of the jacobian (if "values" is NULL) - * 2) The values of the jacobian (if "values" is not NULL) - */ - virtual bool eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values); - - /** Method to return: - * 1) The structure of the hessian of the lagrangian (if "values" is NULL) - * 2) The values of the hessian of the lagrangian (if "values" is not NULL) - */ - virtual bool eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values); - - /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ - virtual void finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value); - - virtual const SosInfo * sosConstraints() const{return NULL;} - virtual const BranchingInfo* branchingInfo() const{return NULL;} - - const double * getX(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value for the primal variables. - - const double * getGrad(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value of gradient for the primal variables. - - const double * getHess(); //Returns a pointer to a matrix of size of numVars_*numVars_ - //with final value of hessian for the primal variables. - - double getObjVal(); //Returns the output of the final value of the objective. - - double iterCount(); //Returns the iteration count - - int returnStatus(); //Returns the status count -}; - -#endif diff --git a/build/cpp/minconTMINLP.hpp b/build/cpp/minconTMINLP.hpp deleted file mode 100644 index 5b3006a..0000000 --- a/build/cpp/minconTMINLP.hpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#ifndef minconTMINLP_HPP -#define minconTMINLP_HPP - -#include "BonTMINLP.hpp" -#include "IpTNLP.hpp" -#include "call_scilab.h" - -using namespace Ipopt; -using namespace Bonmin; - -class minconTMINLP : public TMINLP -{ - private: - - Index numVars_; //Number of variables - - Index numCons_; //Number of constraints - - Index numLC_; //Number of Linear constraints - - Index intconSize_; - - Number *x0_= NULL; //lb_ is a pointer to a matrix of size of 1*numVars_ with lower bound of all variables. - - Number *lb_= NULL; //lb_ is a pointer to a matrix of size of 1*numVars_ with lower bound of all variables. - - Number *ub_= NULL; //ub_ is a pointer to a matrix of size of 1*numVars_ with upper bound of all variables. - - Number *conLb_= NULL; //conLb_ is a pointer to a matrix of size of numCon_*1 with lower bound of all constraints. - - Number *conUb_= NULL; //conUb_ is a pointer to a matrix of size of numCon_*1 with upper bound of all constraints. - - Number *finalX_= NULL; //finalX_ is a pointer to a matrix of size of 1*numVars_ with final value for the primal variables. - - Number finalObjVal_; //finalObjVal_ is a scalar with the final value of the objective. - - Number *intcon_ = NULL; - - int status_; //Solver return status - minconTMINLP(const minconTMINLP&); - minconTMINLP& operator=(const minconTMINLP&); - -public: - // Constructor - minconTMINLP(Index nV, Number *x0, Number *lb, Number *ub, Index nLC, Index nCons, Number *conlb, Number *conub, Index intconSize, Number *intcon):numVars_(nV),x0_(x0),lb_(lb),ub_(ub),numLC_(nLC),numCons_(nCons),conLb_(conlb),conUb_(conub),intconSize_(intconSize),intcon_(intcon),finalX_(0),finalObjVal_(1e20){ } - - /** default destructor */ - virtual ~minconTMINLP(); - - virtual bool get_variables_types(Index n, VariableType* var_types); - - virtual bool get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types); - - virtual bool get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types); - - /** Method to return some info about the nlp */ - virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, - Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style); - - /** Method to return the bounds for my problem */ - virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, - Index m, Number* g_l, Number* g_u); - - /** Method to return the starting point for the algorithm */ - virtual bool get_starting_point(Index n, bool init_x, Number* x, - bool init_z, Number* z_L, Number* z_U, - Index m, bool init_lambda, - Number* lambda); - - /** Method to return the objective value */ - virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); - - /** Method to return the gradient of the objective */ - virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); - - /** Method to return the constraint residuals */ - virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); - - /** Method to return: - * 1) The structure of the jacobian (if "values" is NULL) - * 2) The values of the jacobian (if "values" is not NULL) - */ - virtual bool eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values); - - /** Method to return: - * 1) The structure of the hessian of the lagrangian (if "values" is NULL) - * 2) The values of the hessian of the lagrangian (if "values" is not NULL) - */ - virtual bool eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values); - - /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ - virtual void finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value); - - virtual const SosInfo * sosConstraints() const{return NULL;} - virtual const BranchingInfo* branchingInfo() const{return NULL;} - - const double * getX(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value for the primal variables. - - const double * getGrad(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value of gradient for the primal variables. - - const double * getHess(); //Returns a pointer to a matrix of size of numVars_*numVars_ - //with final value of hessian for the primal variables. - - double getObjVal(); //Returns the output of the final value of the objective. - - double iterCount(); //Returns the iteration count - - int returnStatus(); //Returns the status count -}; - -#endif diff --git a/build/cpp/minuncTMINLP.hpp b/build/cpp/minuncTMINLP.hpp deleted file mode 100644 index 2b6e954..0000000 --- a/build/cpp/minuncTMINLP.hpp +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in - -#define __USE_DEPRECATED_STACK_FUNCTIONS__ -#ifndef minuncTMINLP_HPP -#define minuncTMINLP_HPP - -#include "BonTMINLP.hpp" -#include "IpTNLP.hpp" -#include "call_scilab.h" - -using namespace Ipopt; -using namespace Bonmin; - -class minuncTMINLP : public TMINLP -{ - private: - - Index numVars_; //Number of input variables - - Index intconSize_; - - const Number *varGuess_= NULL; //varGuess_ is a pointer to a matrix of size of 1*numVars_ with initial guess of all variables. - - Number *finalX_= NULL; //finalX_ is a pointer to a matrix of size of 1*numVars_ with final value for the primal variables. - - Number finalObjVal_; //finalObjVal_ is a scalar with the final value of the objective. - - Number *intcon_ = NULL; - - int status_; //Solver return status - minuncTMINLP(const minuncTMINLP&); - minuncTMINLP& operator=(const minuncTMINLP&); - -public: - // Constructor - minuncTMINLP(Index nV, Number *x0, Index intconSize, Number *intcon):numVars_(nV),varGuess_(x0),intconSize_(intconSize),intcon_(intcon),finalX_(0),finalObjVal_(1e20){ } - - /** default destructor */ - virtual ~minuncTMINLP(); - - virtual bool get_variables_types(Index n, VariableType* var_types); - - virtual bool get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types); - - virtual bool get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types); - - /** Method to return some info about the nlp */ - virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, - Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style); - - /** Method to return the bounds for my problem */ - virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, - Index m, Number* g_l, Number* g_u); - - /** Method to return the starting point for the algorithm */ - virtual bool get_starting_point(Index n, bool init_x, Number* x, - bool init_z, Number* z_L, Number* z_U, - Index m, bool init_lambda, - Number* lambda); - - /** Method to return the objective value */ - virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); - - /** Method to return the gradient of the objective */ - virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); - - /** Method to return the constraint residuals */ - virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); - - /** Method to return: - * 1) The structure of the jacobian (if "values" is NULL) - * 2) The values of the jacobian (if "values" is not NULL) - */ - virtual bool eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values); - - /** Method to return: - * 1) The structure of the hessian of the lagrangian (if "values" is NULL) - * 2) The values of the hessian of the lagrangian (if "values" is not NULL) - */ - virtual bool eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values); - - /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ - virtual void finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value); - - virtual const SosInfo * sosConstraints() const{return NULL;} - virtual const BranchingInfo* branchingInfo() const{return NULL;} - - const double * getX(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value for the primal variables. - - const double * getGrad(); //Returns a pointer to a matrix of size of 1*numVars_ - //with final value of gradient for the primal variables. - - const double * getHess(); //Returns a pointer to a matrix of size of numVars_*numVars_ - //with final value of hessian for the primal variables. - - double getObjVal(); //Returns the output of the final value of the objective. - - double iterCount(); //Returns the iteration count - - int returnStatus(); //Returns the status count -}; - -#endif diff --git a/build/cpp/sci_iofunc.cpp b/build/cpp/sci_iofunc.cpp deleted file mode 100644 index f05839c..0000000 --- a/build/cpp/sci_iofunc.cpp +++ /dev/null @@ -1,333 +0,0 @@ -// Symphony Toolbox for Scilab -// (Definition of) Functions for input and output from Scilab -// By Keyur Joshi - -#include "api_scilab.h" -#include "Scierror.h" -#include "sciprint.h" -#include "BOOL.h" -#include <localization.h> -#include "call_scilab.h" -#include <string.h> - - -using namespace std; - -int getDoubleFromScilab(int argNum, double *dest) -{ - //data declarations - SciErr sciErr; - int iRet,*varAddress; - const char errMsg[]="Wrong type for input argument #%d: A double is expected.\n"; - const int errNum=999; - //get variable address - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - //check that it is a non-complex double - if ( !isDoubleType(pvApiCtx,varAddress) || isVarComplex(pvApiCtx,varAddress) ) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - //retrieve and store - iRet = getScalarDouble(pvApiCtx, varAddress, dest); - if(iRet) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - return 0; -} - -int getUIntFromScilab(int argNum, int *dest) -{ - SciErr sciErr; - int iRet,*varAddress; - double inputDouble; - const char errMsg[]="Wrong type for input argument #%d: A nonnegative integer is expected.\n"; - const int errNum=999; - //same steps as above - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - if ( !isDoubleType(pvApiCtx,varAddress) || isVarComplex(pvApiCtx,varAddress) ) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - iRet = getScalarDouble(pvApiCtx, varAddress, &inputDouble); - //check that an unsigned int is stored in the double by casting and recasting - if(iRet || ((double)((unsigned int)inputDouble))!=inputDouble) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - *dest=(unsigned int)inputDouble; - return 0; -} - -int getIntFromScilab(int argNum, int *dest) -{ - SciErr sciErr; - int iRet,*varAddress; - double inputDouble; - const char errMsg[]="Wrong type for input argument #%d: An integer is expected.\n"; - const int errNum=999; - //same steps as above - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - if ( !isDoubleType(pvApiCtx,varAddress) || isVarComplex(pvApiCtx,varAddress) ) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - iRet = getScalarDouble(pvApiCtx, varAddress, &inputDouble); - //check that an int is stored in the double by casting and recasting - if(iRet || ((double)((int)inputDouble))!=inputDouble) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - *dest=(int)inputDouble; - return 0; -} - -int getFixedSizeDoubleMatrixFromScilab(int argNum, int rows, int cols, double **dest) -{ - int *varAddress,inputMatrixRows,inputMatrixCols; - SciErr sciErr; - const char errMsg[]="Wrong type for input argument #%d: A matrix of double of size %d by %d is expected.\n"; - const int errNum=999; - //same steps as above - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - if ( !isDoubleType(pvApiCtx,varAddress) || isVarComplex(pvApiCtx,varAddress) ) - { - Scierror(errNum,errMsg,argNum,rows,cols); - return 1; - } - sciErr = getMatrixOfDouble(pvApiCtx, varAddress, &inputMatrixRows, &inputMatrixCols,NULL); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - //check that the matrix has the correct number of rows and columns - if(inputMatrixRows!=rows || inputMatrixCols!=cols) - { - Scierror(errNum,errMsg,argNum,rows,cols); - return 1; - } - getMatrixOfDouble(pvApiCtx, varAddress, &inputMatrixRows, &inputMatrixCols, dest); - return 0; -} - -int getDoubleMatrixFromScilab(int argNum, int *rows, int *cols, double **dest) -{ - int *varAddress; - SciErr sciErr; - const char errMsg[]="Wrong type for input argument #%d: A matrix of double is expected.\n"; - const int errNum=999; - //same steps as above - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - if ( !isDoubleType(pvApiCtx,varAddress) || isVarComplex(pvApiCtx,varAddress) ) - { - Scierror(errNum,errMsg,argNum); - return 1; - } - getMatrixOfDouble(pvApiCtx, varAddress, rows, cols, dest); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - return 0; -} - -int getFixedSizeDoubleMatrixInList(int argNum, int itemPos, int rows, int cols, double **dest) -{ - int *varAddress,inputMatrixRows,inputMatrixCols; - SciErr sciErr; - const char errMsg[]="Wrong type for input argument #%d: A matrix of double of size %d by %d is expected.\n"; - const int errNum=999; - //same steps as above - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - - getMatrixOfDoubleInList(pvApiCtx, varAddress, itemPos, &rows, &cols, dest); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - return 0; -} - -int getStringFromScilab(int argNum,char **dest) -{ - int *varAddress,inputMatrixRows,inputMatrixCols; - SciErr sciErr; - sciErr = getVarAddressFromPosition(pvApiCtx, argNum, &varAddress); - - //check whether there is an error or not. - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - if ( !isStringType(pvApiCtx,varAddress) ) - { - Scierror(999,"Wrong type for input argument 1: A file name is expected.\n"); - return 1; - } - //read the value in that pointer pointing to file name - getAllocatedSingleString(pvApiCtx, varAddress, dest); - -} - -bool getFunctionFromScilab(int n,char name[], double *x,int posFirstElementOnStackForSF,int nOfRhsOnSF,int nOfLhsOnSF, double **dest) -{ - double check; - createMatrixOfDouble(pvApiCtx, posFirstElementOnStackForSF, 1, n, x); - C2F(scistring)(&posFirstElementOnStackForSF,name,&nOfLhsOnSF,&nOfRhsOnSF,(unsigned long)strlen(name)); - - if(getDoubleFromScilab(posFirstElementOnStackForSF+1,&check)) - { - return true; - } - if (check==1) - { - return true; - } - else - { - int x_rows, x_cols; - if(getDoubleMatrixFromScilab(posFirstElementOnStackForSF, &x_rows, &x_cols, dest)) - { - sciprint("No results "); - return true; - - } - } - return 0; -} - -bool getHessFromScilab(int n,int numConstr_,char name[], double *x,double *obj,double *lambda,int posFirstElementOnStackForSF,int nOfRhsOnSF,int nOfLhsOnSF, double **dest) -{ - double check; - createMatrixOfDouble(pvApiCtx, posFirstElementOnStackForSF, 1, n, x); - createMatrixOfDouble(pvApiCtx, posFirstElementOnStackForSF+1, 1, 1, obj); - createMatrixOfDouble(pvApiCtx, posFirstElementOnStackForSF+2, 1, numConstr_, lambda); - C2F(scistring)(&posFirstElementOnStackForSF,name,&nOfLhsOnSF,&nOfRhsOnSF,(unsigned long)strlen(name)); - - if(getDoubleFromScilab(posFirstElementOnStackForSF+1,&check)) - { - return true; - } - if (check==1) - { - return true; - } - else - { - int x_rows, x_cols; - if(getDoubleMatrixFromScilab(posFirstElementOnStackForSF, &x_rows, &x_cols, dest)) - { - sciprint("No results "); - return 1; - } - } - return 0; -} - -int return0toScilab() -{ - int iRet; - //create variable in scilab - iRet = createScalarDouble(pvApiCtx, nbInputArgument(pvApiCtx)+1,0); - if(iRet) - { - /* If error, no return variable */ - AssignOutputVariable(pvApiCtx, 1) = 0; - return 1; - } - //make it the output variable - AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx)+1; - //return it to scilab - //ReturnArguments(pvApiCtx); - return 0; -} - -int returnDoubleToScilab(double retVal) -{ - int iRet; - //same steps as above - iRet = createScalarDouble(pvApiCtx, nbInputArgument(pvApiCtx)+1,retVal); - if(iRet) - { - /* If error, no return variable */ - AssignOutputVariable(pvApiCtx, 1) = 0; - return 1; - } - AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx)+1; - //ReturnArguments(pvApiCtx); - return 0; -} - -int returnDoubleMatrixToScilab(int itemPos, int rows, int cols, double *dest) -{ - SciErr sciErr; - //same steps as above - sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + itemPos, rows, cols, dest); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - - AssignOutputVariable(pvApiCtx, itemPos) = nbInputArgument(pvApiCtx)+itemPos; - - return 0; -} - -int returnIntegerMatrixToScilab(int itemPos, int rows, int cols, int *dest) -{ - SciErr sciErr; - //same steps as above - sciErr = createMatrixOfInteger32(pvApiCtx, nbInputArgument(pvApiCtx) + itemPos, rows, cols, dest); - if (sciErr.iErr) - { - printError(&sciErr, 0); - return 1; - } - - AssignOutputVariable(pvApiCtx, itemPos) = nbInputArgument(pvApiCtx)+itemPos; - - return 0; -} - - diff --git a/build/cpp/sci_iofunc.hpp b/build/cpp/sci_iofunc.hpp deleted file mode 100644 index 7e18951..0000000 --- a/build/cpp/sci_iofunc.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// Symphony Toolbox for Scilab -// (Declaration of) Functions for input and output from Scilab -// By Keyur Joshi - -#ifndef SCI_IOFUNCHEADER -#define SCI_IOFUNCHEADER - -//input -int getDoubleFromScilab(int argNum, double *dest); -int getUIntFromScilab(int argNum, int *dest); -int getIntFromScilab(int argNum, int *dest); -int getFixedSizeDoubleMatrixFromScilab(int argNum, int rows, int cols, double **dest); -int getDoubleMatrixFromScilab(int argNum, int *rows, int *cols, double **dest); -int getFixedSizeDoubleMatrixInList(int argNum, int itemPos, int rows, int cols, double **dest); -int getStringFromScilab(int argNum,char** dest); -bool getFunctionFromScilab(int n,char name[], double *x,int posFirstElementOnStackForSF,int nOfRhsOnSF,int nOfLhsOnSF, double **dest); -bool getHessFromScilab(int n,int numConstr_,char name[], double *x,double *obj,double *lambda,int posFirstElementOnStackForSF,int nOfRhsOnSF,int nOfLhsOnSF, double **dest); - -//output -int return0toScilab(); -int returnDoubleToScilab(double retVal); -int returnDoubleMatrixToScilab(int itemPos, int rows, int cols, double *dest); -int returnIntegerMatrixToScilab(int itemPos, int rows, int cols, int *dest); - -#endif //SCI_IOFUNCHEADER diff --git a/build/cpp/sci_minbndTMINLP.cpp b/build/cpp/sci_minbndTMINLP.cpp deleted file mode 100644 index f26c089..0000000 --- a/build/cpp/sci_minbndTMINLP.cpp +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Harpreet Singh -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt - -#include "minbndTMINLP.hpp" -#include "sci_iofunc.hpp" - -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> -#include <string.h> -#include <assert.h> -} - -using namespace Ipopt; -using namespace Bonmin; - -minbndTMINLP::~minbndTMINLP() -{ - if(finalX_) delete[] finalX_; -} - -// Set the type of every variable - CONTINUOUS or INTEGER -bool minbndTMINLP::get_variables_types(Index n, VariableType* var_types) -{ - n = numVars_; - for(int i=0; i < n; i++) - var_types[i] = CONTINUOUS; - for(int i=0 ; i < intconSize_ ; ++i) - var_types[(int)(intcon_[i]-1)] = INTEGER; - return true; -} - -// The linearity of the variables - LINEAR or NON_LINEAR -bool minbndTMINLP::get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types) -{ return true; } - -// The linearity of the constraints - LINEAR or NON_LINEAR -bool minbndTMINLP::get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types) -{ return true;} - -//get NLP info such as number of variables,constraints,no.of elements in jacobian and hessian to allocate memory -bool minbndTMINLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) -{ - n=numVars_; // Number of variables - m=0; // Number of constraints - nnz_jac_g = 0; // No. of elements in Jacobian of constraints - nnz_h_lag = n*(n+1)/2; // No. of elements in lower traingle of Hessian of the Lagrangian. - index_style=TNLP::C_STYLE; // Index style of matrices - return true; -} - -//get variable and constraint bound info -bool minbndTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) -{ - unsigned int i; - for(i=0;i<n;i++) - { - x_l[i]=lb_[i]+0.0000001; - x_u[i]=ub_[i]-0.0000001; - } - - g_l=NULL; - g_u=NULL; - return true; -} - -// return the value of the constraints: g(x) -bool minbndTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) -{ - // return the value of the constraints: g(x) - g=NULL; - return true; -} - -// return the structure or values of the jacobian -bool minbndTMINLP::eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values) -{ - if (values == NULL) - { - // return the structure of the jacobian of the constraints - iRow=NULL; - jCol=NULL; - } - else - { - values=NULL; - } - return true; -} - -//get value of objective function at vector x -bool minbndTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) -{ - char name[20]="_f"; - Number *obj; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&obj)) - { - return false; - } - obj_value = *obj; - return true; -} - -//get value of gradient of objective function at vector x. -bool minbndTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) -{ - char name[20]="_gradf"; - Number *resg; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resg)) - { - return false; - } - - Index i; - for(i=0;i<numVars_;i++) - { - grad_f[i]=resg[i]; - } - return true; -} - -// This method sets initial values for required vectors . For now we are assuming 0 to all values. -bool minbndTMINLP::get_starting_point(Index n, bool init_x, Number* x,bool init_z, Number* z_L, Number* z_U,Index m, bool init_lambda,Number* lambda) -{ - assert(init_x == true); - assert(init_z == false); - assert(init_lambda == false); - if (init_x == true) - { //we need to set initial values for vector x - for (Index var=0;var<n;var++) - {x[var]=0.0;}//initialize with 0. - } - return true; -} - -/* - * Return either the sparsity structure of the Hessian of the Lagrangian, - * or the values of the Hessian of the Lagrangian for the given values for - * x,lambda,obj_factor. -*/ - -bool minbndTMINLP::eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values) -{ - double check; - if (values==NULL) - { - Index idx=0; - for (Index row = 0; row < numVars_; row++) - { - for (Index col = 0; col <= row; col++) - { iRow[idx] = row; - jCol[idx] = col; - idx++; - } - } - } - - else - { char name[20]="_gradhess"; - Number *resh; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resh)) - { - return false; - } - Index index=0; - for (Index row=0;row < numVars_ ;++row) - { - for (Index col=0; col <= row; ++col) - { - values[index++]=obj_factor*(resh[numVars_*row+col]); - } - } - } - return true; -} - -void minbndTMINLP::finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value) -{ - finalObjVal_ = obj_value; - status_ = status; - if(status==0 ||status== 3) - { - finalX_ = new double[n]; - for (Index i=0; i<numVars_; i++) - { - finalX_[i] = x[i]; - } - } - -} - -const double * minbndTMINLP::getX() -{ - return finalX_; -} - -double minbndTMINLP::getObjVal() -{ - return finalObjVal_; -} - -int minbndTMINLP::returnStatus() -{ - return status_; -} diff --git a/build/cpp/sci_minconTMINLP.cpp b/build/cpp/sci_minconTMINLP.cpp deleted file mode 100644 index 350594d..0000000 --- a/build/cpp/sci_minconTMINLP.cpp +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt - -#include "minconTMINLP.hpp" -#include "sci_iofunc.hpp" - -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> -#include <string.h> -#include <assert.h> -} - -using namespace Ipopt; -using namespace Bonmin; - -//#define DEBUG 0 - -minconTMINLP::~minconTMINLP() -{ - if(finalX_) delete[] finalX_; -} - -// Set the type of every variable - CONTINUOUS or INTEGER -bool minconTMINLP::get_variables_types(Index n, VariableType* var_types) -{ - #ifdef DEBUG - sciprint("Code is in get_variables_types\n"); - #endif - n = numVars_; - for(int i=0; i < n; i++) - var_types[i] = CONTINUOUS; - for(int i=0 ; i < intconSize_ ; ++i) - var_types[(int)(intcon_[i]-1)] = INTEGER; - return true; -} - -// The linearity of the variables - LINEAR or NON_LINEAR -bool minconTMINLP::get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types) -{ - #ifdef DEBUG - sciprint("Code is in get_variables_linearity\n"); - #endif - for(int i=0;i<n;i++) - { - var_types[i] = Ipopt::TNLP::NON_LINEAR; - } - return true; } - -// The linearity of the constraints - LINEAR or NON_LINEAR -bool minconTMINLP::get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types) -{ - - #ifdef DEBUG - sciprint("Code is in get_constraints_linearity\n"); - #endif - for(int i=0;i<numLC_;i++) - { - const_types[i] = Ipopt::TNLP::LINEAR; - } - - for(int i=numLC_;i<m;i++) - { - const_types[i] = Ipopt::TNLP::NON_LINEAR; - } - return true;} - -//get NLP info such as number of variables,constraints,no.of elements in jacobian and hessian to allocate memory -bool minconTMINLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) -{ - #ifdef DEBUG - sciprint("Code is in get_nlp_info\n"); - #endif - n=numVars_; // Number of variables - m=numCons_; // Number of constraints - nnz_jac_g = n*m; // No. of elements in Jacobian of constraints - nnz_h_lag = n*n; // No. of elements in Hessian of the Lagrangian. - index_style=TNLP::C_STYLE; // Index style of matrices - return true; -} - -//get variable and constraint bound info -bool minconTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) -{ - #ifdef DEBUG - sciprint("Code is in get_bounds_info\n"); - #endif - unsigned int i; - for(i=0;i<n;i++) - { - x_l[i]=lb_[i]; - x_u[i]=ub_[i]; - } - for(i=0;i<m;i++) - { - g_l[i]=conLb_[i]; - g_u[i]=conUb_[i]; - } - return true; -} - -// This method sets initial values for required vectors . For now we are assuming 0 to all values. -bool minconTMINLP::get_starting_point(Index n, bool init_x, Number* x,bool init_z, Number* z_L, Number* z_U,Index m, bool init_lambda,Number* lambda) -{ - assert(init_x == true); - assert(init_z == false); - assert(init_lambda == false); - if (init_x == true) - { //we need to set initial values for vector x - for (Index var=0;var<n;var++) - {x[var]=x0_[var];}//initialize with 0. - } - return true; -} - -//get value of objective function at vector x -bool minconTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) -{ - #ifdef DEBUG - sciprint("Code is eval_f\n"); - #endif - char name[20]="_f"; - Number *obj; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&obj)) - { - return false; - } - obj_value = *obj; - return true; -} - -//get value of gradient of objective function at vector x. -bool minconTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) -{ - #ifdef DEBUG - sciprint("Code is in eval_grad_f\n"); - #endif - char name[20]="_gradf"; - Number *resg; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resg)) - { - return false; - } - - Index i; - for(i=0;i<numVars_;i++) - { - grad_f[i]=resg[i]; - } - return true; -} - -// return the value of the constraints: g(x) -bool minconTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) -{ - #ifdef DEBUG - sciprint("Code is in eval_g\n"); - #endif - // return the value of the constraints: g(x) - if(m==0) - { - g=NULL; - } - else - { - char name[20]="_addnlc"; - Number *con; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&con)) - { - return false; - } - - Index i; - for(i=0;i<m;i++) - { - g[i]=con[i]; - } - } - - return true; -} - -// return the structure or values of the jacobian -bool minconTMINLP::eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values) -{ - #ifdef DEBUG - sciprint("Code is in eval_jac_g\n"); - #endif - if (values == NULL) - { - if(m==0)// return the structure of the jacobian of the constraints - { - iRow=NULL; - jCol=NULL; - } - else - { - unsigned int i,j,idx=0; - for(i=0;i<m;i++) - for(j=0;j<n;j++) - { - iRow[idx]=i; - jCol[idx]=j; - idx++; - } - } - } - else - { - if(m==0) - { - values=NULL; - } - else - { - double* resj; - char name[20]="_gradnlc"; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resj)) - { - return false; - } - int c = 0; - for(int i=0;i<m;i++) - { - for(int j=0;j<n;j++) - { - values[c] = resj[j*(int)m+i]; - c++; - } - } - } - } - return true; -} - -/* - * Return either the sparsity structure of the Hessian of the Lagrangian, - * or the values of the Hessian of the Lagrangian for the given values for - * x,lambda,obj_factor. -*/ - -bool minconTMINLP::eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values) -{ - #ifdef DEBUG - sciprint("Code is in eval_h\n"); - #endif - double check; - if (values==NULL) - { - Index idx=0; - for (Index row = 0; row < numVars_; row++) - { - for (Index col = 0; col < numVars_; col++) - { - iRow[idx] = row; - jCol[idx] = col; - idx++; - } - } - } - else - { char name[20]="_gradhess"; - Number *resCh; - if (getHessFromScilab(n,m,name,x, &obj_factor, lambda, 7, 3,2,&resCh)) - { - return false; - } - Index index=0; - for (Index row=0;row < numVars_ ;++row) - { - for (Index col=0; col < numVars_; ++col) - { - values[index++]=resCh[numVars_*row+col]; - } - } - } - return true; -} - -void minconTMINLP::finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value) -{ - #ifdef DEBUG - sciprint("Code is in finalize_solution\n"); - sciprint("%d",status); - #endif - finalObjVal_ = obj_value; - status_ = status; - if(status==0 ||status== 3) - { - finalX_ = new double[n]; - for (Index i=0; i<numVars_; i++) - { - finalX_[i] = x[i]; - } - } -} - -const double * minconTMINLP::getX() -{ - return finalX_; -} - -double minconTMINLP::getObjVal() -{ - return finalObjVal_; -} - -int minconTMINLP::returnStatus() -{ - return status_; -} diff --git a/build/cpp/sci_minconTMINLP.cpp~ b/build/cpp/sci_minconTMINLP.cpp~ deleted file mode 100644 index 9d4ccd3..0000000 --- a/build/cpp/sci_minconTMINLP.cpp~ +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt - -#include "minconTMINLP.hpp" -#include "sci_iofunc.hpp" - -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> -#include <string.h> -#include <assert.h> -} - -using namespace Ipopt; -using namespace Bonmin; - -#define DEBUG 0 - -minconTMINLP::~minconTMINLP() -{ - if(finalX_) delete[] finalX_; -} - -// Set the type of every variable - CONTINUOUS or INTEGER -bool minconTMINLP::get_variables_types(Index n, VariableType* var_types) -{ - #ifdef DEBUG - sciprint("Code is in get_variables_types\n"); - #endif - n = numVars_; - for(int i=0; i < n; i++) - var_types[i] = CONTINUOUS; - for(int i=0 ; i < intconSize_ ; ++i) - var_types[(int)(intcon_[i]-1)] = INTEGER; - return true; -} - -// The linearity of the variables - LINEAR or NON_LINEAR -bool minconTMINLP::get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types) -{ - #ifdef DEBUG - sciprint("Code is in get_variables_linearity\n"); - #endif - for(int i=0;i<n;i++) - { - var_types[i] = Ipopt::TNLP::NON_LINEAR; - } - return true; } - -// The linearity of the constraints - LINEAR or NON_LINEAR -bool minconTMINLP::get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types) -{ - - #ifdef DEBUG - sciprint("Code is in get_constraints_linearity\n"); - #endif - for(int i=0;i<numLC_;i++) - { - const_types[i] = Ipopt::TNLP::LINEAR; - } - - for(int i=numLC_;i<m;i++) - { - const_types[i] = Ipopt::TNLP::NON_LINEAR; - } - return true;} - -//get NLP info such as number of variables,constraints,no.of elements in jacobian and hessian to allocate memory -bool minconTMINLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) -{ - #ifdef DEBUG - sciprint("Code is in get_nlp_info\n"); - #endif - n=numVars_; // Number of variables - m=numCons_; // Number of constraints - nnz_jac_g = n*m; // No. of elements in Jacobian of constraints - nnz_h_lag = n*n; // No. of elements in Hessian of the Lagrangian. - index_style=TNLP::C_STYLE; // Index style of matrices - return true; -} - -//get variable and constraint bound info -bool minconTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) -{ - #ifdef DEBUG - sciprint("Code is in get_bounds_info\n"); - #endif - unsigned int i; - for(i=0;i<n;i++) - { - x_l[i]=lb_[i]; - x_u[i]=ub_[i]; - } - for(i=0;i<m;i++) - { - g_l[i]=conLb_[i]; - g_u[i]=conUb_[i]; - } - return true; -} - -// This method sets initial values for required vectors . For now we are assuming 0 to all values. -bool minconTMINLP::get_starting_point(Index n, bool init_x, Number* x,bool init_z, Number* z_L, Number* z_U,Index m, bool init_lambda,Number* lambda) -{ - assert(init_x == true); - assert(init_z == false); - assert(init_lambda == false); - if (init_x == true) - { //we need to set initial values for vector x - for (Index var=0;var<n;var++) - {x[var]=x0_[var];}//initialize with 0. - } - return true; -} - -//get value of objective function at vector x -bool minconTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) -{ - #ifdef DEBUG - sciprint("Code is eval_f\n"); - #endif - char name[20]="_f"; - Number *obj; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&obj)) - { - return false; - } - obj_value = *obj; - return true; -} - -//get value of gradient of objective function at vector x. -bool minconTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) -{ - #ifdef DEBUG - sciprint("Code is in eval_grad_f\n"); - #endif - char name[20]="_gradf"; - Number *resg; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resg)) - { - return false; - } - - Index i; - for(i=0;i<numVars_;i++) - { - grad_f[i]=resg[i]; - } - return true; -} - -// return the value of the constraints: g(x) -bool minconTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) -{ - #ifdef DEBUG - sciprint("Code is in eval_g\n"); - #endif - // return the value of the constraints: g(x) - if(m==0) - { - g=NULL; - } - else - { - char name[20]="_addnlc"; - Number *con; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&con)) - { - return false; - } - - Index i; - for(i=0;i<m;i++) - { - g[i]=con[i]; - } - } - - return true; -} - -// return the structure or values of the jacobian -bool minconTMINLP::eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values) -{ - #ifdef DEBUG - sciprint("Code is in eval_jac_g\n"); - #endif - if (values == NULL) - { - if(m==0)// return the structure of the jacobian of the constraints - { - iRow=NULL; - jCol=NULL; - } - else - { - unsigned int i,j,idx=0; - for(i=0;i<m;i++) - for(j=0;j<n;j++) - { - iRow[idx]=i; - jCol[idx]=j; - idx++; - } - } - } - else - { - if(m==0) - { - values=NULL; - } - else - { - double* resj; - char name[20]="_gradnlc"; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resj)) - { - return false; - } - int c = 0; - for(int i=0;i<m;i++) - { - for(int j=0;j<n;j++) - { - values[c] = resj[j*(int)m+i]; - c++; - } - } - } - } - return true; -} - -/* - * Return either the sparsity structure of the Hessian of the Lagrangian, - * or the values of the Hessian of the Lagrangian for the given values for - * x,lambda,obj_factor. -*/ - -bool minconTMINLP::eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values) -{ - #ifdef DEBUG - sciprint("Code is in eval_h\n"); - #endif - double check; - if (values==NULL) - { - Index idx=0; - for (Index row = 0; row < numVars_; row++) - { - for (Index col = 0; col < numVars_; col++) - { - iRow[idx] = row; - jCol[idx] = col; - idx++; - } - } - } - else - { char name[20]="_gradhess"; - Number *resCh; - if (getHessFromScilab(n,m,name,x, &obj_factor, lambda, 7, 3,2,&resCh)) - { - return false; - } - Index index=0; - for (Index row=0;row < numVars_ ;++row) - { - for (Index col=0; col < numVars_; ++col) - { - values[index++]=resCh[numVars_*row+col]; - } - } - } - return true; -} - -void minconTMINLP::finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value) -{ - #ifdef DEBUG - sciprint("Code is in finalize_solution\n"); - sciprint("%d",status); - #endif - finalObjVal_ = obj_value; - status_ = status; - if(status==0 ||status== 3) - { - finalX_ = new double[n]; - for (Index i=0; i<numVars_; i++) - { - finalX_[i] = x[i]; - } - } -} - -const double * minconTMINLP::getX() -{ - return finalX_; -} - -double minconTMINLP::getObjVal() -{ - return finalObjVal_; -} - -int minconTMINLP::returnStatus() -{ - return status_; -} diff --git a/build/cpp/sci_minuncTMINLP.cpp b/build/cpp/sci_minuncTMINLP.cpp deleted file mode 100644 index 696c5ef..0000000 --- a/build/cpp/sci_minuncTMINLP.cpp +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Harpreet Singh, Pranav Deshpande and Akshay Miterani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt - -#include "minuncTMINLP.hpp" -#include "sci_iofunc.hpp" - -extern "C" -{ -#include "call_scilab.h" -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> -#include <string.h> -#include <assert.h> -} - -using namespace std; -using namespace Ipopt; -using namespace Bonmin; - -minuncTMINLP::~minuncTMINLP() -{ - if(finalX_) delete[] finalX_; -} - -// Set the type of every variable - CONTINUOUS or INTEGER -bool minuncTMINLP::get_variables_types(Index n, VariableType* var_types) -{ - n = numVars_; - for(int i=0; i < n; i++) - var_types[i] = CONTINUOUS; - for(int i=0 ; i < intconSize_ ; ++i) - var_types[(int)(intcon_[i]-1)] = INTEGER; - return true; -} - -// The linearity of the variables - LINEAR or NON_LINEAR -bool minuncTMINLP::get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types) -{ - /* - n = numVars_; - for(int i = 0; i < n; i++) - var_types[i] = Ipopt::TNLP::LINEAR; - */ - return true; -} - -// The linearity of the constraints - LINEAR or NON_LINEAR -bool minuncTMINLP::get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types) -{ - /* m = numConstr_; - for(int i = 0; i < m; i++) - const_types[i] = Ipopt::TNLP::LINEAR; - */ - return true; -} - -//get NLP info such as number of variables,constraints,no.of elements in jacobian and hessian to allocate memory -bool minuncTMINLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) -{ - n=numVars_; // Number of variables - m=0; // Number of constraints - nnz_jac_g = 0; // No. of elements in Jacobian of constraints - nnz_h_lag = n*(n+1)/2; // No. of elements in lower traingle of Hessian of the Lagrangian. - index_style=TNLP::C_STYLE; // Index style of matrices - return true; -} - -//get variable and constraint bound info -bool minuncTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) -{ - unsigned int i; - for(i=0;i<n;i++) - { - x_l[i]=-1.0e19; - x_u[i]=1.0e19; - } - - g_l=NULL; - g_u=NULL; - return true; -} - -// return the value of the constraints: g(x) -bool minuncTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) -{ - // return the value of the constraints: g(x) - g=NULL; - return true; -} - -// return the structure or values of the jacobian -bool minuncTMINLP::eval_jac_g(Index n, const Number* x, bool new_x,Index m, Index nele_jac, Index* iRow, Index *jCol,Number* values) -{ - if (values == NULL) - { - // return the structure of the jacobian of the constraints - iRow=NULL; - jCol=NULL; - } - else - { - values=NULL; - } - - return true; -} - -//get value of objective function at vector x -bool minuncTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) -{ - char name[20]="_f"; - Number *obj; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&obj)) - { - return false; - } - obj_value = *obj; - return true; -} - -//get value of gradient of objective function at vector x. -bool minuncTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) -{ - char name[20]="_gradf"; - Number *resg; - if (getFunctionFromScilab(n,name,x, 7, 1, 2, &resg)) - { - return false; - } - - Index i; - for(i=0;i<numVars_;i++) - { - grad_f[i]=resg[i]; - } - return true; -} - -// This method sets initial values for required vectors . For now we are assuming 0 to all values. -bool minuncTMINLP::get_starting_point(Index n, bool init_x, Number* x,bool init_z, Number* z_L, Number* z_U,Index m, bool init_lambda,Number* lambda) -{ - assert(init_x == true); - assert(init_z == false); - assert(init_lambda == false); - if (init_x == true) - { //we need to set initial values for vector x - for (Index var=0;var<n;var++) - x[var]=varGuess_[var];//initialize with 0 or we can change. - } - - return true; -} - -/* - * Return either the sparsity structure of the Hessian of the Lagrangian, - * or the values of the Hessian of the Lagrangian for the given values for - * x,lambda,obj_factor. -*/ - -bool minuncTMINLP::eval_h(Index n, const Number* x, bool new_x,Number obj_factor, Index m, const Number* lambda,bool new_lambda, Index nele_hess, Index* iRow,Index* jCol, Number* values) -{ - double check; - if (values==NULL) - { - Index idx=0; - for (Index row = 0; row < numVars_; row++) - { - for (Index col = 0; col <= row; col++) - { - iRow[idx] = row; - jCol[idx] = col; - idx++; - } - } - } - - else - { - char name[20]="_gradhess"; - Number *resh; - if (getFunctionFromScilab(n,name,x, 7, 1,2,&resh)) - { - return false; - } - Index index=0; - for (Index row=0;row < numVars_ ;++row) - { - for (Index col=0; col <= row; ++col) - { - values[index++]=obj_factor*(resh[numVars_*row+col]); - } - } - return true; - } -} - - -void minuncTMINLP::finalize_solution(SolverReturn status,Index n, const Number* x, Number obj_value) -{ - finalObjVal_ = obj_value; - status_ = status; - if(status==0 ||status== 3) - { - finalX_ = new double[n]; - for (Index i=0; i<numVars_; i++) - { - finalX_[i] = x[i]; - } - } - -} - -const double * minuncTMINLP::getX() -{ - return finalX_; -} - -double minuncTMINLP::getObjVal() -{ - return finalObjVal_; -} - -int minuncTMINLP::returnStatus() -{ - return status_; -} |