1 /* 2 * This file is part of qpOASES. 3 * 4 * qpOASES -- An Implementation of the Online Active Set Strategy. 5 * Copyright (C) 2007-2017 by Hans Joachim Ferreau, Andreas Potschka, 6 * Christian Kirches et al. All rights reserved. 7 * 8 * qpOASES is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * qpOASES is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 * See the GNU Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with qpOASES; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 24 25 /** 26 * \file testing/cpp/test_example1a.cpp 27 * \author Hans Joachim Ferreau 28 * \version 3.2 29 * \date 2007-2017 30 * 31 * Very simple example for testing qpOASES using the SQProblem class. 32 */ 33 34 35 36 #include <qpOASES.hpp> 37 #include <qpOASES/UnitTesting.hpp> 38 39 40 /** Example for qpOASES main function using the SQProblem class. */ 41 int main( ) 42 { 43 USING_NAMESPACE_QPOASES 44 45 /* Setup data of first QP. */ 46 real_t H[2*2] = { 1.0, 0.0, 0.0, 0.5 }; 47 real_t A[1*2] = { 1.0, 1.0 }; 48 real_t g[2] = { 1.5, 1.0 }; 49 real_t lb[2] = { 0.5, -2.0 }; 50 real_t ub[2] = { 5.0, 2.0 }; 51 real_t lbA[1] = { -1.0 }; 52 real_t ubA[1] = { 2.0 }; 53 54 /* Setup data of second QP. */ 55 real_t H_new[2*2] = { 1.0, 0.5, 0.5, 0.5 }; 56 real_t A_new[1*2] = { 1.0, 5.0 }; 57 real_t g_new[2] = { 1.0, 1.5 }; 58 real_t lb_new[2] = { 0.0, -1.0 }; 59 real_t ub_new[2] = { 5.0, -0.5 }; 60 real_t lbA_new[1] = { -2.0 }; 61 real_t ubA_new[1] = { 1.0 }; 62 63 64 /* Setting up SQProblem object. */ 65 SQProblem example( 2,1 ); 66 67 /* Solve first QP. */ 68 int_t nWSR = 10; 69 example.init( H,g,A,lb,ub,lbA,ubA, nWSR,0 ); 70 71 real_t xOpt[2]; 72 real_t yOpt[2+1]; 73 example.getPrimalSolution( xOpt ); 74 example.getDualSolution( yOpt ); 75 76 /* Compute KKT tolerances */ 77 real_t stat, feas, cmpl; 78 SolutionAnalysis analyzer; 79 80 analyzer.getKktViolation( &example, &stat,&feas,&cmpl ); 81 printf( "stat = %e\nfeas = %e\ncmpl = %e\n", stat,feas,cmpl ); 82 83 QPOASES_TEST_FOR_TOL( stat,1e-15 ); 84 QPOASES_TEST_FOR_TOL( feas,1e-15 ); 85 QPOASES_TEST_FOR_TOL( cmpl,1e-15 ); 86 87 88 /* Solve second QP. */ 89 nWSR = 10; 90 example.hotstart( H_new,g_new,A_new,lb_new,ub_new,lbA_new,ubA_new, nWSR,0 ); 91 92 /* Get and print solution of second QP. */ 93 example.getPrimalSolution( xOpt ); 94 example.getDualSolution( yOpt ); 95 printf( "\nxOpt = [ %e, %e ]; objVal = %e\n\n", xOpt[0],xOpt[1],example.getObjVal() ); 96 97 /* Compute KKT tolerances */ 98 analyzer.getKktViolation( &example, &stat,&feas,&cmpl ); 99 printf( "stat = %e\nfeas = %e\ncmpl = %e\n", stat,feas,cmpl ); 100 101 QPOASES_TEST_FOR_TOL( stat,2e-15 ); 102 QPOASES_TEST_FOR_TOL( feas,1e-15 ); 103 QPOASES_TEST_FOR_TOL( cmpl,1e-15 ); 104 105 return TEST_PASSED; 106 } 107 108 109 /* 110 * end of file 111 */ 112