source: trunk/Bonmin/examples/CppExample/MyTMINLP.cpp @ 1

Last change on this file since 1 was 1, checked in by andreasw, 13 years ago

imported initial code

  • Property svn:eol-style set to native
  • Property svn:keywords set to "Author Date Id Revision"
File size: 3.7 KB
Line 
1// (C) Copyright Carnegie Mellon University 2006
2// All Rights Reserved.
3// This code is published under the Common Public License.
4//
5// Authors :
6// P. Bonami, Carnegie Mellon University
7//
8// Date :  03/17/2006
9#include "MyTMINLP.hpp"
10
11
12bool 
13MyTMINLP::get_var_types(Index n, VariableType* var_types)
14{
15  var_types[0] = BINARY;
16  var_types[1] = CONTINUOUS;
17  var_types[2] = CONTINUOUS;
18  var_types[3] = INTEGER;
19  return true;
20}
21
22bool 
23MyTMINLP::get_constraints_types(Index m, ConstraintType* const_types)
24{
25  assert (m==3);
26  const_types[0] = NON_LINEAR;
27  const_types[1] = LINEAR;
28  const_types[2] = LINEAR;
29  return true;
30}
31bool 
32MyTMINLP::get_nlp_info(Index& n, Index&m, Index& nnz_jac_g,
33                       Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style)
34{
35  n = 4;//number of variable
36  m = 3;//number of constraints
37  nnz_jac_g = 7;//number of non zeroes in Jacobian
38  nnz_h_lag = 2;//number of non zeroes in Hessian of Lagrangean
39  index_style = TNLP::FORTRAN_STYLE;
40  return true;
41}
42
43bool 
44MyTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u,
45                            Index m, Number* g_l, Number* g_u)
46{
47  assert(n==4);
48  assert(m==3);
49  x_l[0] = 0.;
50  x_u[0] = 1.;
51 
52  x_l[1] = 0.;
53  x_u[1] = DBL_MAX;
54 
55  x_l[2] =0.;
56  x_u[2] = DBL_MAX;
57 
58  x_l[3] = 0;
59  x_u[3] = 5;
60 
61  g_l[0] = -DBL_MAX;
62  g_u[0] = 1./4.;
63
64  g_l[1] = -DBL_MAX;
65  g_u[1] = 0;
66 
67  g_l[2] = -DBL_MAX;
68  g_u[2] = 2;
69  return true;
70}
71
72bool 
73MyTMINLP::get_starting_point(Index n, bool init_x, Number* x,
74                       Index m, bool init_lambda, Number* lambda)
75{
76  assert(n==4);
77  assert(m==3);
78 
79  assert(init_x);
80  assert(!init_lambda);
81  x[0] = 0;
82  x[1] = 0;
83  x[2] = 0;
84  x[3] = 0;
85  return true;
86}
87
88bool 
89MyTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value)
90{
91  assert(n==4);
92  obj_value = - x[0] - x[1] - x[2];
93  return true;
94}
95
96bool
97MyTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f)
98{
99  assert(n==4);
100  grad_f[0] = -1.;
101  grad_f[1] = -1.; 
102  grad_f[2] = -1.;
103  grad_f[3] = 0.;
104  return true;
105}
106
107bool
108MyTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g)
109{
110  assert(n==4);
111  assert(m==3);
112 
113  g[0] = (x[1] - 1./2.)*(x[1] - 1./2.) + (x[2] - 1./2.)*(x[2] - 1./2.);
114  g[1] = x[0] - x[1];
115  g[2] = x[0] + x[2] + x[3];
116 
117  return true;
118}
119
120bool
121MyTMINLP::eval_jac_g(Index n, const Number* x, bool new_x,
122                     Index m, Index nnz_jac, Index* iRow, Index *jCol,
123                     Number* values)
124{
125  assert(n==4);
126  assert(nnz_jac == 7);
127  if(values == NULL) {
128    iRow[0] = 2;
129    jCol[0] = 1;
130
131    iRow[1] = 3;
132    jCol[1] = 1;
133   
134    iRow[2] = 1;
135    jCol[2] = 2;
136   
137    iRow[3] = 2;
138    jCol[3] = 2;
139   
140    iRow[4] = 1;
141    jCol[4] = 3;
142       
143    iRow[5] = 3;
144    jCol[5] = 3;
145   
146    iRow[6] = 3;
147    jCol[6] = 4;
148    return true;
149  }
150  else {
151    values[0] = 1.;
152    values[1] = 1;
153
154    values[2] = 2*x[1] - 1;
155    values[3] = -1.;
156
157    values[4] = 2*x[2] - 1;
158    values[5] = 1.;
159   
160    values[6] = 1.;
161   
162    return true;
163  }
164}
165
166bool
167MyTMINLP::eval_h(Index n, const Number* x, bool new_x,
168                 Number obj_factor, Index m, const Number* lambda,
169                 bool new_lambda, Index nele_hess, Index* iRow,
170                 Index* jCol, Number* values)
171{
172  assert (n==4);
173  assert (m==3);
174  assert(nele_hess==2);
175  if(values==NULL)
176  {
177    iRow[0] = 2;
178    jCol[0] = 2;
179   
180    iRow[1] = 3;
181    jCol[1] = 3;
182  }
183  else {
184    values[0] = 2*lambda[0];
185    values[1] = 2*lambda[0];
186  }
187  return true;
188}
189
190void
191MyTMINLP::finalize_solution(SolverReturn status,
192                            Index n, const Number* x, const Number* z_L, const Number* z_U,
193                            Index m, const Number* g, const Number* lambda,
194                            Number obj_value)
195{//don't need anything
196}
Note: See TracBrowser for help on using the repository browser.