Beispiel #1
0
  def evaluate( self, test_values ):
    if type( test_values ) is not np.ndarray:
        raise TypeError
    self.potential_file.write_with_parameters( test_values )
    ran_okay = self.training_set.run( 'pimaim' )
    if not ran_okay:
        totalChi = 1E10
        output('Error: likely due to unphysical parameter value\n') 
        return totalChi
    ff_forces = self.training_set.new_forces.T
    ff_dipoles = self.training_set.new_dipoles.T
    ff_stresses = self.training_set.new_stresses.T

    chiSq = {}
    chiSq[ 'forces' ]   = chi_squared( self.ai_forces, ff_forces, self.plot, 'forces-errors' )
    chiSq[ 'dipoles' ]  = chi_squared( self.ai_dipoles, ff_dipoles, self.plot, 'dipoles-errors' )
    chiSq[ 'stresses' ] = chi_squared( self.ai_stresses, ff_stresses, self.plot, 'stresses-errors' )
    factorTot = sum( self.scaling.values() )
    totalChi = sum( [ self.scaling[ k ] * chiSq[ k ] for k in chiSq.keys() ] ) / factorTot

    output( 'Forces chi sq: ' + fmt.format(chiSq[ 'forces' ])+'\n')
    output( 'Dipoles chi sq: ' + fmt.format(chiSq[ 'dipoles' ]) +'\n')
    output( 'Stresses chi sq: ' + fmt.format(chiSq[ 'stresses' ]) + '\n')
    output( 'Total chi sq (no factors): ' + fmt.format( np.mean( list( chiSq.values() ) ) ) + '\n' )
    output('Total chi sq: '+fmt.format(totalChi)+'\n')
    output('\n')

    return totalChi