WBST function optimizer finds best for given function with wide range of parameters. There are 2 methods for searching best results - brute force and genetic algorithm. 
-	Brute force performs test for every possible combination of input parameters and returns average of results. 
-	Genetic algorithm uses shark library to optimize function's parameters. Shark library has to be installed in system. Application was tested with version Shark-2.2.2, downloaded from http://sourceforge.net/projects/shark-project/files/
Optimizer requires parallel WBST tester to run properly.

Command line options:
--help				- Printing help message with list of possible options
--cfg-file arg			- Command for config file input

Basic options:
--wbst-tester arg		- Path to parallel WBST tester
--nodes arg			- Number of nodes available for parallel computations
--hostfile-path arg		- Hostfile for parallel computation. Should be provided by administrator
--seed arg			- Seed for randomizing. May be constant for repeatable results
--method arg			- Method of folding test. One of: n-fold
--folds-num arg			- Number of folds
--workdir arg			- Path for temporary files
--wbst-learning-fold arg	- File with WBST tests to learn genetic algorithm
--wbst-testing-fold arg		- File with WBST tests to test genetic algorithm
--matrix-path arg		- Path with matrix
--flex arg			- Flex class for WBST files
--load-ccs			- Whether matrix should be loaded using ccs file
--function-file arg		- File with function to be parsed
--parents-population-size arg	- Size of parents' population for genetic algorithm
--children-population-size arg	- Size of children's population for genetic algorithm
--iterations arg		- Number of iterations to be made by genetic algorithm
--search-method arg		- Best function search method, one of: brute-force, genetic.

How to run WBST function optimizer: 

./wbstOptimizer --cfg-file arg

arg	- Configuration file for WBST function optimizer

Format of functions file:

type;value[;another_value]

Possible types:
- values rewritten as is:
	syntax;value_to_be_rewritten
- possible string values:
	string;val1;val2;val3
- possible logical values:
	bool;value1;value2
	bool;value1;req;param_required1;param_required2
	bool;value1;value2;req;param_required

		- value1 & value2: true or false
		- param_required: Parameter required to put new one to function	//Only works with brute force search
- numerical values
	int;minRange;maxRange;step						//Step works only with brute force search
	int;{val1,val2,val3};param_required					//Only works with brute force search
	int;minRange;maxRange;step;param_required1;param_required2
	double;name;minRange;maxRange;step
	double;name;{val1,val2,val3};param_required				//Only works with brute force search
	double;name;minRange;maxRange;step;param_required1;param_required2


For example, such input:

syntax;cmp(weight=rwf_lin(rankbuilder=normal(uniform_rank=true,rank_size=
int;500;2000;1000
syntax;),threshold=0),selector=frequency(min_nz=0,min_tf=0,min_TF=0),simfunction=cosine(),filter=noisektf(k=
string;22129;22222
syntax;,mintf=5))

will produce strings such as :

cmp(weight=rwf_lin(rankbuilder=normal(uniform_rank=true,rank_size=1500),threshold=0),selector=frequency(min_nz=0,min_tf=0,min_TF=0),simfunction=cosine(),filter=noisektf(k=22129,mintf=5))

Values next to "rank_size=" and "noisektf(k=" will vary in such configuration.

