summaryrefslogtreecommitdiff
path: root/sci_gateway/cpp/sci_QuadNLP.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sci_gateway/cpp/sci_QuadNLP.cpp')
-rw-r--r--sci_gateway/cpp/sci_QuadNLP.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/sci_gateway/cpp/sci_QuadNLP.cpp b/sci_gateway/cpp/sci_QuadNLP.cpp
index 2c484b7..ddca7cf 100644
--- a/sci_gateway/cpp/sci_QuadNLP.cpp
+++ b/sci_gateway/cpp/sci_QuadNLP.cpp
@@ -56,12 +56,11 @@ bool QuadNLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number
//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;
- Number temp;
obj_value=0;
- for (i=0;i<n;++i){
- for (j=0;j<n;++j){
- obj_value+=x[i]*x[j]*qMatrix_[n*i+j];
+ 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];
}
@@ -71,24 +70,30 @@ bool QuadNLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value){
//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++){
+ for(i=0;i<n;i++)
+ {
grad_f[i]=lMatrix_[i];
for(j=0;j<n;j++)
- grad_f[i]+=(qMatrix_[n*i+j]+qMatrix_[n*j+i])*x[j];
- }
- return true;
+ {
+ 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++){
+ for(i=0;i<m;i++)
+ {
g[i]=0;
for(j=0;j<n;j++)
- g[i]+=x[j]*conMatrix_[n*i+j];
+ {
+ g[i]+=x[j]*conMatrix_[i+j*m];
}
- return true;
}
+ 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,
@@ -137,7 +142,7 @@ bool QuadNLP::eval_jac_g(Index n, const Number* x, bool new_x,
int index=0;
for (int var=0;var<m;++var)
for (int flag=0;flag<n;++flag)
- values[index++]=conMatrix_[n*var+flag];
+ values[index++]=conMatrix_[var+flag*m];
}
return true;
}
@@ -166,7 +171,7 @@ bool QuadNLP::eval_h(Index n, const Number* x, bool new_x,
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]+qMatrix_[n*col+row]);
+ values[index++]=obj_factor*(qMatrix_[n*row+col]);
}
}
}