package pikater;
import jade.util.leap.ArrayList;
import jade.util.leap.Iterator;
import jade.util.leap.List;
import java.util.Random;
import pikater.ontology.messages.Evaluation;
import pikater.ontology.messages.Option;
public class Agent_Random extends Agent_OptionsManager {
/**
*
*/
private static final long serialVersionUID = 2777277001533605329L;
private int number_of_tries = 0;
@Override
protected String getAgentType() {
return "Random";
}
@Override
protected boolean finished() {
if (number_of_tries >= maximum_tries) {
return true;
}
if (evaluation != null) {
if (evaluation.getError_rate() < error_rate) {
return true;
}
}
return false;
}
@Override
protected void generateNewOptions(Evaluation result) {
// go through the Options Vector, find mutable options, generate random
// values, make it a string
List newOptions = new ArrayList();
Random generator = new Random();
Iterator itr = Options.iterator();
while (itr.hasNext()) {
Option next = (Option) itr.next();
if (next.getMutable()) {
// String optionName = " -"+next.getName()+" ";
// int numArgs = (int)(next.getNumber_of_args().getMin()
// +generator.nextInt((int)(next.getNumber_of_args().getMax()-next.getNumber_of_args().getMin()+1)));
String[] values = next.getUser_value().split(",");
int numArgs = values.length;
if (!next.getIs_a_set()) {
if (next.getData_type().equals("INT") || next.getData_type().equals("MIXED")) {
String si = "";
for (int i = 1; i < numArgs; i++) {
if (values[i - 1].equals("?")) {
int rInt = (int) (next.getRange().getMin() + generator
.nextInt((int) (next.getRange().getMax() - next
.getRange().getMin())));
si += Integer.toString(rInt) + ",";
}
else {
si += values[i - 1] + ",";
}
}
if (values[numArgs - 1].equals("?")) {
int rInt = (int) (next.getRange().getMin() + generator
.nextInt((int) (next.getRange().getMax() - next
.getRange().getMin())));
si += Integer.toString(rInt);
}
else {
si += values[numArgs - 1] + ",";
}
next.setValue(si);
}
if (next.getData_type().equals("FLOAT")) {
String sf = "";
for (int i = 1; i < numArgs; i++) {
if (values[i - 1].equals("?")) {
float rFloat = next.getRange().getMin()
+ (float) (generator.nextDouble())
* (next.getRange().getMax() - next
.getRange().getMin());
sf += Float.toString(rFloat) + ",";
}
else {
sf += values[i - 1] + ",";
}
}
if (values[numArgs - 1].equals("?")) {
float rFloat = next.getRange().getMin()
+ (float) (generator.nextDouble())
* (next.getRange().getMax() - next.getRange()
.getMin());
sf += Float.toString(rFloat);
}
else {
sf += values[numArgs - 1];
}
next.setValue(sf);
}
if (next.getData_type().equals("BOOLEAN")) {
int rInt2 = generator.nextInt(2);
if (rInt2 == 1) {
next.setValue("True");
} else {
next.setValue("False");
}
}
} else {
String s = "";
for (int i = 1; i < numArgs; i++) {
if (values[i - 1].equals("?")) {
int index = generator.nextInt(next.getSet().size());
s += next.getSet().get(index) + ",";
} else {
s += values[i - 1] + ",";
}
}
if (values[numArgs - 1].equals("?")) {
int index = generator.nextInt(next.getSet().size());
s += next.getSet().get(index);
} else {
s += values[numArgs - 1];
}
next.setValue(s);
}
}
}
number_of_tries++;
}
}