Class: OpenCLMinimization::NewtonRampsonMinimizer

Inherits:
Object
  • Object
show all
Defined in:
lib/opencl/opencl_minimization.rb

Overview

Classic Newton-Raphson minimization method.
Requires first and second derivative == Usage n = 3 expected_point = [1, 100, 1000] f = "(x-3)(x-3)+5" fd = "2(x-3)" fdd = "2" min = OpenCLMinimization::NewtonRampsonMinimizer.new(n, expected_point, f, fd, fdd) min.minimize min.x_minimum min.f_minimum

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(n, expected_point, f, fd, fdd) ⇒ NewtonRampsonMinimizer

== Parameters:

  • n: Number of Jobs
  • expected_point: Initial point
  • f: Original function
  • fd: First derivative function string
  • fdd: Second derivative function string

111
112
113
114
115
116
117
118
119
120
121
# File 'lib/opencl/opencl_minimization.rb', line 111

def initialize(n, expected_point, f, fd, fdd)
  @n              = n
  @expected_point = expected_point
  @f              = f
  @fd             = fd
  @fdd            = fdd
  @max_iterations = MAX_ITERATIONS_DEFAULT
  @epsilon        = EPSILON_DEFAULT
  @golden         = GOLDEN_DEFAULT
  @sqrt_epsilon   = SQRT_EPSILON_DEFAULT
end

Instance Attribute Details

#epsilon=(value) ⇒ Object (writeonly)

Sets the attribute epsilon

Parameters:

  • value

    the value to set the attribute epsilon to.


101
102
103
# File 'lib/opencl/opencl_minimization.rb', line 101

def epsilon=(value)
  @epsilon = value
end

#f_minimumObject (readonly)

Returns the value of attribute f_minimum


98
99
100
# File 'lib/opencl/opencl_minimization.rb', line 98

def f_minimum
  @f_minimum
end

#golden=(value) ⇒ Object (writeonly)

Sets the attribute golden

Parameters:

  • value

    the value to set the attribute golden to.


102
103
104
# File 'lib/opencl/opencl_minimization.rb', line 102

def golden=(value)
  @golden = value
end

#max_iterations=(value) ⇒ Object (writeonly)

Sets the attribute max_iterations

Parameters:

  • value

    the value to set the attribute max_iterations to.


100
101
102
# File 'lib/opencl/opencl_minimization.rb', line 100

def max_iterations=(value)
  @max_iterations = value
end

#x_minimumObject (readonly)

Returns the value of attribute x_minimum


97
98
99
# File 'lib/opencl/opencl_minimization.rb', line 97

def x_minimum
  @x_minimum
end

Instance Method Details

#minimizeObject


123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/opencl/opencl_minimization.rb', line 123

def minimize  # create Buffers for inputs and outputs

  expected_buffer = FFI::Buffer.alloc_inout(:pointer, @n)
  x_buffer        = FFI::Buffer.alloc_inout(:pointer, @n)
  f_buffer        = FFI::Buffer.alloc_inout(:pointer, @n)

  # set inputs
  expected_buffer.write_array_of_float(@expected_point)

  # call minimizer
  OpenCLMinimization::opencl_minimize(@n, nil, expected_buffer, nil, 1, @f, @fd, @fdd, x_buffer, f_buffer, 0,
                                      @max_iterations, @epsilon, @golden, @sqrt_epsilon, PATH_TO_KERNEL)

  @x_minimum = Array.new(@n)
  @f_minimum = Array.new(@n)  # read results

  @x_minimum = x_buffer.read_array_of_float(@n)
  @f_minimum = f_buffer.read_array_of_float(@n)
end