diff options
Diffstat (limited to 'sci_gateway/cpp/sci_QuadNLP.cpp~')
-rw-r--r-- | sci_gateway/cpp/sci_QuadNLP.cpp~ | 255 |
1 files changed, 0 insertions, 255 deletions
diff --git a/sci_gateway/cpp/sci_QuadNLP.cpp~ b/sci_gateway/cpp/sci_QuadNLP.cpp~ deleted file mode 100644 index 4ff99ce..0000000 --- a/sci_gateway/cpp/sci_QuadNLP.cpp~ +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Quadratic Programming Toolbox for Scilab using IPOPT library - * Authors : - Sai Kiran - Keyur Joshi - Iswarya - */ - -#include "QuadNLP.hpp" -#include "IpIpoptData.hpp" - -extern "C"{ -#include <api_scilab.h> -#include <Scierror.h> -#include <BOOL.h> -#include <localization.h> -#include <sciprint.h> - - -double x_static,i, *op_obj_x = NULL,*op_obj_value = NULL; - -using namespace Ipopt; - -QuadNLP::~QuadNLP() - { - free(finalX_); - free(finalZl_); - free(finalZu_);} - -//get NLP info such as number of variables,constraints,no.of elements in jacobian and hessian to allocate memory -bool QuadNLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style){ - n=numVars_; // Number of variables - m=numConstr_; // Number of constraints - nnz_jac_g = n*m; // 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=C_STYLE; // Index style of matrices - return true; - } - -//get variable and constraint bound info -bool QuadNLP::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]=varLB_[i]; - x_u[i]=varUB_[i]; - sciprint("VarLU %lf %lf \n",x_l[i],x_u[i]); - } - - for(i=0;i<m;i++){ - g_l[i]=conLB_[i]; - g_u[i]=conUB_[i]; - sciprint("conLU %lf %lf \n",g_l[i],g_u[i]); - } - return true; - } - -//get value of objective function at vector x -bool QuadNLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value){ - unsigned int i,j; - obj_value=0; - - for (i=0;i<=n;i++){ - for (j=0;j<=n;j++){ - obj_value+=0.5*x[i]*x[j]*qMatrix_[n*i+j]; - } - obj_value+=x[i]*lMatrix_[i]; - } - return true; - } - -//get value of gradient of objective function at vector x. -bool QuadNLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f){ - unsigned int i,j; - for(i=0;i<n;i++) - { - grad_f[i]=lMatrix_[i]; - for(j=0;j<n;j++) - { - grad_f[i]+=(qMatrix_[n*i+j])*x[j]; - } - } - return true; -} - -//Get the values of constraints at vector x. -bool QuadNLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g){ - unsigned int i,j; - for(i=0;i<m;i++) - { - g[i]=0; - for(j=0;j<n;j++) - { - g[i]+=x[j]*conMatrix_[i+j*m]; - } - } - return true; -} - -// This method sets initial values for required vectors . For now we are assuming 0 to all values. -bool QuadNLP::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){ - 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 or we can change. - } - - if (init_z == true){ //we need to provide initial values for vector bound multipliers - for (Index var=0;var<n;++var){ - z_L[var]=0.0; //initialize with 0 or we can change. - z_U[var]=0.0;//initialize with 0 or we can change. - } - } - - if (init_lambda == true){ //we need to provide initial values for lambda values. - for (Index var=0;var<m;++var){ - lambda[var]=0.0; //initialize with 0 or we can change. - } - } - - return true; - } -/* Return either the sparsity structure of the Jacobian of the constraints, or the values for the Jacobian of the constraints at the point x. - -*/ -bool QuadNLP::eval_jac_g(Index n, const Number* x, bool new_x, - Index m, Index nele_jac, Index* iRow, Index *jCol, - Number* values){ - - //It asked for structure of jacobian. - if (values==NULL){ //Structure of jacobian (full structure) - int index=0; - for (int var=0;var<m;++var)//no. of constraints - for (int flag=0;flag<n;++flag){//no. of variables - iRow[index]=var; - jCol[index]=flag; - index++; - } - } - //It asked for values - else { - int index=0; - for (int var=0;var<m;++var) - for (int flag=0;flag<n;++flag) - values[index++]=conMatrix_[var+flag*m]; - } - 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 QuadNLP::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){ - - if (values==NULL){ - Index idx=0; - for (Index row = 0; row < n; row++) { - for (Index col = 0; col <= row; col++) { - iRow[idx] = row; - jCol[idx] = col; - idx++; - } - } - } - else { - Index index=0; - for (Index row=0;row < n;++row){ - for (Index col=0; col <= row; ++col){ - values[index++]=obj_factor*(qMatrix_[n*row+col]); - } - } - } - return true; - } - - -void QuadNLP::finalize_solution(SolverReturn status, - Index n, const Number* x, const Number* z_L, const Number* z_U, - Index m, const Number* g, const Number* lambda, Number obj_value, - const IpoptData* ip_data, - IpoptCalculatedQuantities* ip_cq){ - - finalX_ = (double*)malloc(sizeof(double) * numVars_ * 1); - for (Index i=0; i<n; i++) - { - finalX_[i] = x[i]; - } - - finalZl_ = (double*)malloc(sizeof(double) * numVars_ * 1); - for (Index i=0; i<n; i++) - { - finalZl_[i] = z_L[i]; - } - - finalZu_ = (double*)malloc(sizeof(double) * numVars_ * 1); - for (Index i=0; i<n; i++) - { - finalZu_[i] = z_U[i]; - } - - finalLambda_ = (double*)malloc(sizeof(double) * numConstr_ * 1); - for (Index i=0; i<m; i++) - { - finalLambda_[i] = lambda[i]; - } - - iter_ = ip_data->iter_count(); - finalObjVal_ = obj_value; - status_ = status; - - } - - const double * QuadNLP::getX() - { - return finalX_; - } - - const double * QuadNLP::getZl() - { - return finalZl_; - } - - const double * QuadNLP::getZu() - { - return finalZu_; - } - - const double * QuadNLP::getLambda() - { - return finalLambda_; - } - - double QuadNLP::getObjVal() - { - return finalObjVal_; - } - - double QuadNLP::iterCount() - { - return (double)iter_; - } - - int QuadNLP::returnStatus() - { - return status_; - } - -} |