| 20 | } |
| 21 | |
| 22 | class CTestOpt : public CBiteOptDeep |
| 23 | { |
| 24 | public: |
| 25 | int con_notmet; |
| 26 | double real_value; |
| 27 | |
| 28 | virtual void getMinValues( double* const p ) const |
| 29 | { |
| 30 | int i; |
| 31 | |
| 32 | for( i = 0; i < ::N; i++ ) |
| 33 | { |
| 34 | p[ i ] = -10.0; |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | virtual void getMaxValues( double* const p ) const |
| 39 | { |
| 40 | int i; |
| 41 | |
| 42 | for( i = 0; i < ::N; i++ ) |
| 43 | { |
| 44 | p[ i ] = 10.0; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | double penalty( const double v ) |
| 49 | { |
| 50 | if( v > tol ) |
| 51 | { |
| 52 | con_notmet++; |
| 53 | return( v - tol ); |
| 54 | } |
| 55 | |
| 56 | return( 0.0 ); |
| 57 | } |
| 58 | |
| 59 | virtual double optcost( const double* const p0 ) |
| 60 | { |
| 61 | double p[ ::N ]; |
| 62 | int i; |
| 63 | |
| 64 | for( i = 0; i < ::N; i++ ) |
| 65 | { |
| 66 | p[ i ] = applyRound( p0[ i ]); |
| 67 | } |
| 68 | |
| 69 | double cost = sqr(p[0])+sqr(p[1])+p[0]*p[1]-14*p[0]-16*p[1]+sqr(p[2]-10)+ |
| 70 | 4*sqr(p[3]-5)+sqr(p[4]-3)+2*sqr(p[5]-1)+5*sqr(p[6])+ |
| 71 | 7*sqr(p[7]-11)+2*sqr(p[8]-10)+sqr(p[9]-7)+45; |
| 72 | |
| 73 | const int n_con = 8; |
| 74 | double pn[ n_con ]; |
| 75 | con_notmet = 0; |
| 76 | |
| 77 | pn[ 0 ] = penalty( 4*p[0]+5*p[1]-3*p[6]+9*p[7]-105 ); |
| 78 | pn[ 1 ] = penalty( 10*p[0]-8*p[1]-17*p[6]+2*p[7] ); |
| 79 | pn[ 2 ] = penalty( -8*p[0]+2*p[1]+5*p[8]-2*p[9]-12 ); |
nothing calls this directly
no outgoing calls
no test coverage detected