Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00037 #include <stdlib.h>
00038
00039 #include <qpOASES.hpp>
00040 #include "example4CP.cpp"
00041
00042
00045 int main( )
00046 {
00047 USING_NAMESPACE_QPOASES
00048
00049 int i,j,jj;
00050 real_t d = 0.0;
00051
00052
00053 real_t H[7*7];
00054 real_t A[50*7];
00055 real_t g[7];
00056 real_t lbA[50];
00057
00058
00059
00060
00061
00062
00063
00064
00065 for( i=0; i<7*7; ++i )
00066 H[i] = 0.0;
00067 for( i=2; i<7; ++i )
00068 H[i*7+i] = 1.0e-6;
00069 H[0] = 1.0;
00070 H[1] = 0.5;
00071 H[7] = 0.5;
00072 H[8] = 2.0;
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 for( i=0; i<50*7; ++i )
00085 A[i] = 0.0;
00086 for( i=0; i<50; ++i )
00087 {
00088 for( j=0; j<2; ++j )
00089 A[i*7+j] = (real_t)rand() / (real_t)RAND_MAX;
00090
00091 A[i*7 + (i/10)+2] = 1.0;
00092 }
00093
00094
00095
00096
00097
00098
00099
00100
00101 for( i=0; i<7; ++i )
00102 g[i] = 0.0;
00103 g[0] = -1.0;
00104 g[1] = -0.5;
00105
00106 for( i=0; i<50; ++i )
00107 lbA[i] = 1.0;
00108
00109
00110 MyConstraintProduct myCP( 7,50,A );
00111
00112
00113
00114 QProblem example( 7,50 );
00115 example.setConstraintProduct( &myCP );
00116
00117
00118
00119 real_t cputime = 1.0;
00120 int nWSR = 100;
00121 example.init( H,g,A,0,0,lbA,0, nWSR,&cputime );
00122
00123
00124 real_t xOpt[7], yOpt[7+50];
00125 example.getPrimalSolution( xOpt );
00126 example.getDualSolution( yOpt );
00127
00128
00129
00130 const int n_rhs = 7+7+50;
00131 real_t g_in[7*n_rhs];
00132 real_t b_in[7*n_rhs];
00133 real_t bA_in[50*n_rhs];
00134 real_t x_out[7*n_rhs];
00135 real_t y_out[(7+50)*n_rhs];
00136
00137 int ii;
00138 memset (g_in, 0, sizeof (g_in));
00139 memset (b_in, 0, sizeof (b_in));
00140 memset (bA_in, 0, sizeof (bA_in));
00141
00142 for ( ii = 0; ii < 7; ++ii )
00143 g_in[ii*7 + ii] = 1.0;
00144 for ( ii = 0; ii < 7; ++ii )
00145 b_in[(ii+7)*7 + ii] = 1.0;
00146 for ( ii = 0; ii < 50; ++ii )
00147 bA_in[(ii+14)*50 + ii] = 1.0;
00148
00149 example.solveCurrentEQP ( n_rhs, g_in, b_in, b_in, bA_in, bA_in, x_out, y_out );
00150
00151
00152 real_t perturb = 1.0e-6;
00153 real_t nrm = 0.0;
00154 for ( ii = 0; ii < n_rhs; ++ii )
00155 {
00156 for ( jj = 0; jj < 7; ++jj )
00157 g_in[ii*7 + jj] = g[jj] + g_in[ii*7+jj]*perturb;
00158 for ( jj = 0; jj < 50; ++jj )
00159 bA_in[ii*50 + jj] = lbA[jj] + bA_in[ii*50+jj]*perturb;
00160
00161 nWSR = 100;
00162 example.hotstart( &g_in[ii*7],0,0,&bA_in[ii*50],0, nWSR, 0 );
00163
00164 real_t xPer[7], yPer[7+50];
00165 example.getPrimalSolution( xPer );
00166 example.getDualSolution( yPer );
00167
00168 for ( jj = 0; jj < 7; ++jj )
00169 {
00170 d = fabs (x_out[ii*7+jj]*perturb - (xPer[jj]-xOpt[jj]) );
00171 if (nrm < d) nrm=d;
00172 }
00173 for ( jj = 0; jj < 7+50; ++jj )
00174 {
00175 d = fabs (y_out[ii*(7+50)+jj]*perturb - (yPer[jj]-yOpt[jj]) );
00176 if (nrm < d) nrm=d;
00177 }
00178 }
00179 printf ("Maximum perturbation over all directions: %e\n", nrm);
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 return 0;
00195 }
00196
00197
00198
00199
00200