Class: OOL::Conmin::Minimizer

Inherits:
GSL::Object show all
Defined in:
lib/ool/conmin.rb,
ext/ool.c

Defined Under Namespace

Classes: Gencan, Pgrad, Spg

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GSL::Object

#dup, #info, #inspect

Class Method Details

.alloc(*args) ⇒ Object



79
80
81
82
83
84
85
86
87
88
# File 'ext/ool.c', line 79

static VALUE rb_ool_conmin_minimizer_alloc(int argc, VALUE *argv, VALUE klass)
{
  ool_conmin_minimizer *m;
  VALUE obj;
  if (argc < 2) rb_raise(rb_eArgError, "Too few arguments (%d for >= 2)", argc);
  m = ool_conmin_minimizer_alloc(get_minimizer_type(argv[0]), FIX2INT(argv[1]));
  obj = Data_Wrap_Struct(klass, 0, ool_conmin_minimizer_free, m);
  if (argc > 2) rb_ool_conmin_minimizer_set(argc-2, argv+2, obj);
  return obj;
}

Instance Method Details

#dxObject



336
337
338
339
340
341
# File 'ext/ool.c', line 336

static VALUE rb_ool_conmin_minimizer_dx(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return Data_Wrap_Struct(cgsl_vector, 0, NULL, m->dx);
}

#fObject



312
313
314
315
316
317
# File 'ext/ool.c', line 312

static VALUE rb_ool_conmin_minimizer_f(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return rb_float_new(m->f);
}

#fcountObject



348
349
350
351
352
353
# File 'ext/ool.c', line 348

static VALUE rb_ool_conmin_minimizer_fcount(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_minimizer_fcount(m));
}

#gcountObject



354
355
356
357
358
359
# File 'ext/ool.c', line 354

static VALUE rb_ool_conmin_minimizer_gcount(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_minimizer_gcount(m));
}

#gradientObject



324
325
326
327
328
329
# File 'ext/ool.c', line 324

static VALUE rb_ool_conmin_minimizer_gradient(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return Data_Wrap_Struct(cgsl_vector, 0, NULL, m->gradient);
}

#hcountObject



360
361
362
363
364
365
# File 'ext/ool.c', line 360

static VALUE rb_ool_conmin_minimizer_hcount(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_minimizer_hcount(m));
}

#is_optimalObject



366
367
368
369
370
371
# File 'ext/ool.c', line 366

static VALUE rb_ool_conmin_minimizer_is_optimal(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_is_optimal(m));
}

#is_optimal?Boolean

Returns:

  • (Boolean)


372
373
374
375
376
377
378
# File 'ext/ool.c', line 372

static VALUE rb_ool_conmin_minimizer_is_optimal2(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  if (ool_conmin_is_optimal(m)) return Qtrue;
  else return Qfalse;
}

#iterateObject



379
380
381
382
383
384
# File 'ext/ool.c', line 379

static VALUE rb_ool_conmin_minimizer_iterate(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_minimizer_iterate(m));
}

#minimumObject



330
331
332
333
334
335
# File 'ext/ool.c', line 330

static VALUE rb_ool_conmin_minimizer_minimum(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return rb_float_new(ool_conmin_minimizer_minimum(m));
}

#nameObject



306
307
308
309
310
311
# File 'ext/ool.c', line 306

static VALUE rb_ool_conmin_minimizer_name(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return rb_str_new2(ool_conmin_minimizer_name(m));
}

#parameters_defaultObject



396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
# File 'ext/ool.c', line 396

static VALUE rb_ool_conmin_minimizer_parameters_default(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  if (m->type == ool_conmin_minimizer_spg) {
      return rb_ool_conmin_spg_parameters_default(cool_conmin_spg);
  } else if (m->type == ool_conmin_minimizer_pgrad) {
      return rb_ool_conmin_pgrad_parameters_default(cool_conmin_pgrad);    
  } else if (m->type == ool_conmin_minimizer_gencan) {
      return rb_ool_conmin_gencan_parameters_default(cool_conmin_gencan);    
  } else {
      rb_raise(rb_eRuntimeError, "Unkowm minimizer type.");
  }  
  return Qnil;   /* never reaches here */
}

#parameters_getObject



270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'ext/ool.c', line 270

static VALUE rb_ool_conmin_minimizer_parameters_get(VALUE obj)
{
  ool_conmin_minimizer *m; 
  ool_conmin_pgrad_parameters *Pp;
  ool_conmin_spg_parameters *Ps;
  ool_conmin_gencan_parameters *Pg;  
  void *P;
  VALUE ary;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  ool_conmin_parameters_get(m, P);
  if (m->type ==   ool_conmin_minimizer_pgrad) {
    Pp = (ool_conmin_pgrad_parameters*) P;
    ary = create_parameters_ary_pgrad(Pp);
  } else if (m->type == ool_conmin_minimizer_spg) {
    Ps = (ool_conmin_spg_parameters*) P;
    ary = create_parameters_ary_spg(Ps);            
  } else {
    Pg = (ool_conmin_gencan_parameters*) P;
    ary = create_parameters_ary_gencan(Pg);           
  }
  return ary;
}

#parameters_set(params) ⇒ Object



293
294
295
296
297
298
299
300
301
302
303
304
# File 'ext/ool.c', line 293

static VALUE rb_ool_conmin_minimizer_parameters_set(VALUE obj, VALUE params)
{
  ool_conmin_minimizer *m;
  ool_conmin_pgrad_parameters *Pp;
  ool_conmin_spg_parameters *Ps;
  ool_conmin_gencan_parameters *Pg;
  void *P;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  P = get_parameter(m->type, Pp, Ps, Pg, params);
  ool_conmin_parameters_set(m, P);
  return params;
}

#restartObject



385
386
387
388
389
390
# File 'ext/ool.c', line 385

static VALUE rb_ool_conmin_minimizer_restart(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return INT2FIX((int) ool_conmin_minimizer_restart(m));
}

#set(*args) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'ext/ool.c', line 92

static VALUE rb_ool_conmin_minimizer_set(int argc, VALUE *argv, VALUE obj)
{
  ool_conmin_minimizer *m;
  ool_conmin_function *F;
  ool_conmin_constraint *C;
  gsl_vector *v;
  ool_conmin_pgrad_parameters Pp;
  ool_conmin_spg_parameters Ps;
  ool_conmin_gencan_parameters Pg;
  void *P;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  switch (argc) {
  case 3:
    if (CLASS_OF(argv[0]) != cool_conmin_function) 
      rb_raise(rb_eTypeError, "Wrong argument type 0 (OOL::Conmin::Function expected)");
    if (CLASS_OF(argv[1]) != cool_conmin_constraint) 
      rb_raise(rb_eTypeError, "Wrong argument type 1 (OOL::Conmin::Constraint expected)");
    if (!VECTOR_P(argv[2]))
      rb_raise(rb_eTypeError, "Wrong argument type 2 (GSL::Vector expected)"); 
    Data_Get_Struct(argv[0], ool_conmin_function, F);
    Data_Get_Struct(argv[1], ool_conmin_constraint, C);
    Data_Get_Struct(argv[2], gsl_vector, v);
    P = get_parameter(m->type, &Pp, &Ps, &Pg, Qnil);      
    ool_conmin_minimizer_set(m, F, C, v, P);            
    break;
  case 4:
    if (CLASS_OF(argv[0]) != cool_conmin_function) 
      rb_raise(rb_eTypeError, "Wrong argument type 0 (OOL::Conmin::Function expected)");
    if (CLASS_OF(argv[1]) != cool_conmin_constraint) 
      rb_raise(rb_eTypeError, "Wrong argument type 1 (OOL::Conmin::Constraint expected)");
    if (!VECTOR_P(argv[2]))
      rb_raise(rb_eTypeError, "Wrong argument type 2 (GSL::Vector expected)"); 
    if (!rb_obj_is_kind_of(argv[3], rb_cArray) && argv[3] != Qnil)
      rb_raise(rb_eTypeError, "Wrong argument type 3 (Array expected)"); 
    Data_Get_Struct(argv[0], ool_conmin_function, F);
    Data_Get_Struct(argv[1], ool_conmin_constraint, C);
    Data_Get_Struct(argv[2], gsl_vector, v);
    P = get_parameter(m->type, &Pp, &Ps, &Pg, argv[3]);     
    ool_conmin_minimizer_set(m, F, C, v, P);          
    break;
  default:
    rb_raise(rb_eArgError, "Wrong number of arguments (%d for 3 or 4)", argc);
  }
  return obj;  
}

#sizeObject



342
343
344
345
346
347
# File 'ext/ool.c', line 342

static VALUE rb_ool_conmin_minimizer_size(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return rb_float_new(ool_conmin_minimizer_size(m));
}

#xObject



318
319
320
321
322
323
# File 'ext/ool.c', line 318

static VALUE rb_ool_conmin_minimizer_x(VALUE obj)
{
  ool_conmin_minimizer *m;
  Data_Get_Struct(obj, ool_conmin_minimizer, m);
  return Data_Wrap_Struct(cgsl_vector, 0, NULL, m->x);
}