Index: cpp/f8-to-f1/geno_f8.cpp
===================================================================
--- cpp/f8-to-f1/geno_f8.cpp	(revision 1)
+++ cpp/f8-to-f1/geno_f8.cpp	(revision 6)
@@ -19,4 +19,28 @@
 
 #define GENO_F8_DEBUG 1 //0 - off, 1 - on
+
+#define FIELDSTRUCT Geno_f8
+
+static ParamEntry GENO8param_tab[]=
+{
+{"Genetics: f8",1,F8_OPERATION_COUNT,},
+{"f8_mut_chg_begin_arg", 0, 0, "Change beginning argument", "f 0 100 8", FIELD(operation[F8_CHANGE_BEGINNING_ARG]),"mutation: probability of changing a beginning argument", },
+{"f8_mut_chg_arg", 0, 0, "Change argument", "f 0 100 8", FIELD(operation[F8_CHANGE_ARG]),"mutation: probability of changing a production's argument", },
+{"f8_mut_del_comm", 0, 0, "Delete command", "f 0 100 8", FIELD(operation[F8_DELETE_COMMAND]),"mutation: probability of deleting a command", },
+{"f8_mut_insert_comm", 0, 0, "Insert commands", "f 0 100 9", FIELD(operation[F8_INSERT_COMMANDS]),"mutation: probability of inserting commands", },
+{"f8_mut_enc", 0, 0, "Encapsulate commands", "f 0 100 10",FIELD(operation[F8_ENCAPSULATE]),"mutation: probability of encapsulating commands", },
+{"f8_mut_chg_cond_sign", 0, 0, "Change condition sign", "f 0 100 8",FIELD(operation[F8_CHANGE_CONDITION_SIGN]),"mutation: probability of changing a condition sign", },
+{"f8_mut_add_param", 0, 0, "Add parameter", "f 0 100 9", FIELD(operation[F8_ADD_PARAMETER]),"mutation: probability of adding a parameter to the production", },
+{"f8_mut_add_cond", 0, 0, "Add condition", "f 0 100 8", FIELD(operation[F8_ADD_CONDITION]),"mutation: probability of ading a condition to the subproduction", },
+{"f8_mut_add_subprod", 0, 0, "Add subproduction", "f 0 100 8", FIELD(operation[F8_ADD_SUBPRODUCTION]),"mutation: probability of adding a subproduction", },
+{"f8_mut_chg_iter_number", 0, 0, "Change iteration number", "f 0 100 8", FIELD(operation[F8_CHANGE_ITERATIONS_NUMBER]),"mutation: probability of changing an iterations number", },
+{"f8_mut_del_param", 0, 0, "Delete parameter", "f 0 100 8", FIELD(operation[F8_DELETE_PARAMETER]),"mutation: probability of deleting a parameter", },
+{"f8_mut_del_cond", 0, 0, "Delete condition", "f 0 100 8", FIELD(operation[F8_DELETE_CONDITION]),"mutation: probability of deleting a condition", },
+{"f8_mut_add_loop", 0, 0, "Add loop", "f 0 100 0", FIELD(operation[F8_ADD_LOOP]),"mutation: probability of ading a loop", },
+{"f8_mut_del_loop", 0, 0, "Delete loop", "f 0 100 0", FIELD(operation[F8_DELETE_LOOP]),"mutation: probability of deleting a loop", },
+{0,},
+};
+
+#undef FIELDSTRUCT
 
 ProductionInfo::ProductionInfo(SString name, int paramCount) {
@@ -38,4 +62,26 @@
 	this->simpleCommandLetters.push_back('^');
 	this->converter = new GenoConv_F8ToF1();
+	
+	par.setParamTab(GENO8param_tab);
+	par.select(this);
+	par.setDefault();
+	
+	/*mutation_method_names = new char*[F8_OPERATION_COUNT - 1];
+	int index = 0;
+	mutation_method_names[index++]="changed beginning argument";
+	mutation_method_names[index++]="changed argument";
+	mutation_method_names[index++]="deleted command";
+	mutation_method_names[index++]="inserted command";
+	mutation_method_names[index++]="encapsulated command";
+	mutation_method_names[index++]="changed condition sign";
+	mutation_method_names[index++]="added parameter";
+	mutation_method_names[index++]="added condition";
+	mutation_method_names[index++]="added subproduction";
+	mutation_method_names[index++]="changed iterations number";
+	mutation_method_names[index++]="deleted parameter";
+	mutation_method_names[index++]="deleted condition";
+	mutation_method_names[index++]="added loop";
+	mutation_method_names[index++]="deleted loop";
+	*/
 	
 #ifdef GENO_F8_DEBUG > 0
@@ -511,10 +557,5 @@
 		int random2 = randomN(randomSubproduction->conditions.size());
 		Condition *c = &(randomSubproduction->conditions.at(random2));
-		c->relation = (c->relation == r_greater) ? r_lessEqual :
-				(c->relation == r_greaterEqual) ? r_less :
-				(c->relation == r_less) ? r_greaterEqual :
-				(c->relation == r_lessEqual) ? r_greater :
-				(c->relation == r_equal) ? r_different :
-				r_equal;
+		c->relation = this->getDifferentCondition(c->relation);
 		chg = 2.0 / (float) in.len();
 	}
@@ -1157,4 +1198,47 @@
 }
 
+RelationType Geno_f8::getDifferentCondition(RelationType type) {
+	RelationType types[5];
+	int randomType = randomN(5);
+	if (type == r_greater) {
+		types[0] = r_greaterEqual;
+		types[1] = r_equal;
+		types[2] = r_different;
+		types[3] = r_lessEqual;
+		types[4] = r_less;
+	} else if (type == r_greaterEqual) {
+		types[0] = r_greater;
+		types[1] = r_equal;
+		types[2] = r_different;
+		types[3] = r_lessEqual;
+		types[4] = r_less;
+	} else if (type == r_equal) {
+		types[0] = r_greater;
+		types[1] = r_greaterEqual;
+		types[2] = r_different;
+		types[3] = r_lessEqual;
+		types[4] = r_less;
+	} else if (type == r_different) {
+		types[0] = r_greater;
+		types[1] = r_greaterEqual;
+		types[2] = r_equal;
+		types[3] = r_lessEqual;
+		types[4] = r_less;
+	} else if (type == r_lessEqual) {
+		types[0] = r_greater;
+		types[1] = r_greaterEqual;
+		types[2] = r_equal;
+		types[3] = r_different;
+		types[4] = r_less;
+	} else if (type == r_less) {
+		types[0] = r_greater;
+		types[1] = r_greaterEqual;
+		types[2] = r_equal;
+		types[3] = r_different;
+		types[4] = r_lessEqual;
+	}
+	return types[randomType];
+}
+
 SString Geno_f8::removeProductionCalls(const SString production) const {
 	SString line = trimSString(production);
