Project

feldtruby

0.0
No commit activity in last 3 years
No release in over 3 years
Robert Feldt's Common Ruby Code lib
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

feldtruby

Robert Feldt's Common Ruby Code lib. I will gradually collect the many generally useful Ruby tidbits I have laying around and clean them up into here. Don't want to rewrite these things again and again... So far this collects a number of generally useful additions to the standard Ruby classes/libs and then includes a simple optimization framework (FeldtRuby::Optimize).

Note that good documentation is not really a focus here. As things mature in here I will move logically unique/separate sets of functionality into separate Ruby libs/gems of useful code. At that point there will be more focus on documentation.

email: robert.feldt ((a)) gmail.com

Contents

Statistics

  • Cluster linkage metrics
  • Access to R from Ruby (extends existing lib so that you can more easily transfer complex objects back to Ruby)
  • ...

Time

Time.timestamp()    				# Get a timestamp string back with the current time

Array

Basic calc/statistics: sum, mean, average, stdev, variance, rms, weighted_sum, weighted_mean, sum_of_abs, sum_of_abs_deviations

[1,2,3].swap!(0,2) 					=> [3, 2, 1] # destructive swap of two elements
[1,2,5].distance_between_elements 	=> [1, 3]
[15, 1, 7, 0].ranks					=> [1, 3, 2, 0]
[[2.3, :a], [1.7, :b]].ranks_by {|v| v[0]}	=> [[1, 2.3, :a], [2, 1.7, :b]]

Float

1.456.round_to_decimals(2) 			=> 1.46 (round to given num of decimals)

FileChangeWatcher

Watch for file changes in given paths then call hooks with the updated files.

Kernel

rand_int(top)	 					# random integer in range 0...top

Optimize

A simple optimization framework with classes:

  • Objective (single or multi-objective optimization critera)
  • SearchSpace (capture constraints for optimization values/parameters)
  • RandomSearcher (random search for optimal values)
  • DifferentialEvolution (effective numerical optimization with evolutionary algorithm)

but also support for different type of logging etc. Setting up an optimization can be quite involved but there is a simple wrapper method, with good defaults, for numerical optimization using DE:

# Optimizing with the Rosenbrock function on [0, 2], see:
# 	http://en.wikipedia.org/wiki/Rosenbrock_function
require 'feldtruby/optimize'
xbest, ybest = FeldtRuby::Optimize.optimize(0, 2) {|x, y|
	(1 - x)**2 + 100*(y - x*x)**2
}

Copyright

Copyright (c) 2012-2013 Robert Feldt. See LICENSE.txt for further details.