| 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 ); |
| 80 | pn[ 3 ] = penalty( 3*sqr(p[0]-2)+4*sqr(p[1]-3)+2*sqr(p[2])-7*p[3]-120 ); |
| 81 | pn[ 4 ] = penalty( 5*sqr(p[0])+8*p[1]+sqr(p[2]-6)-2*p[3]-40 ); |
| 82 | pn[ 5 ] = penalty( 0.5*sqr(p[0]-8)+2*sqr(p[1]-4)+3*sqr(p[4])-p[5]-30 ); |
| 83 | pn[ 6 ] = penalty( sqr(p[0])+2*sqr(p[1]-2)-2*p[0]*p[1]+14*p[4]-6*p[5] ); |
| 84 | pn[ 7 ] = penalty( -3*p[0]+6*p[1]+12*sqr(p[8]-8)-7*p[9] ); |
| 85 | |
| 86 | real_value = cost; |
| 87 | |
| 88 | if( con_notmet > 0 ) |
| 89 | { |
| 90 | const double ps = 1.0 + 1.0 / n_con; |
| 91 | double pns = 0.0; |
| 92 | |
| 93 | for( i = 0; i < n_con; i++ ) |
| 94 | { |
| 95 | const double v = pn[ i ]; |
| 96 | pns = ( 1.0 + pns ) * ps + ( v + v * v + v * v * v ) * 0.33333; |
| 97 | } |
| 98 | |
| 99 | cost += 1e10 * pns; |
| 100 | } |
| 101 | |
| 102 | return( cost ); |
| 103 | } |
| 104 | }; |
| 105 | |
| 106 | int main() |
no test coverage detected