diff --git a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java index a1c0b7c3ac373d9908824b38bb070c3c793fd573..a22f1b7bb610895afbdfa7f589388129288761a5 100644 --- a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java +++ b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java @@ -7,8 +7,10 @@ import org.apache.http.entity.ContentType; import org.apache.http.util.EntityUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + import java.io.File; import java.io.FileReader; +import java.io.IOException; import java.util.Arrays; public class Benchmark { @@ -38,15 +40,15 @@ public class Benchmark { private static final Logger logger = LogManager.getLogger(Benchmark.class); private static final String ERASER_ITEM_URI = "http://localhost:4567/model/items/"; //TODO ITEM_NAME HAS TO BE DISCUSSED - private static String[] ACTIVITY_ITEM_NAME; - private static String[] PREFERENCE_ITEM_NAME; - private static boolean flag2 = true; + private String[] ACTIVITY_ITEM_NAME; + private String[] PREFERENCE_ITEM_NAME; //csv_type is activity or preference Benchmark(String a_csv_file_path, String p_csv_file_path) { this.a_csv_file_path = a_csv_file_path; this.p_csv_file_path = p_csv_file_path; } void start(){ + int TIME_PERIOD = 1000; String PREFERENCE_URL = "http://localhost:4567/model/items/iris1_item/state"; String ACTIVITY_URL = "http://localhost:4567/activity/current"; File a_file; @@ -57,7 +59,6 @@ public class Benchmark { CSVReader p_csv_reader; String[] a_next_record; String[] p_next_record; - boolean flag1; a_file=new File(a_csv_file_path); p_file= new File(p_csv_file_path); try { @@ -66,45 +67,35 @@ public class Benchmark { a_csv_reader = new CSVReader(a_file_reader); p_csv_reader = new CSVReader(p_file_reader); int i = 0; - while ((((a_next_record = a_csv_reader.readNext())!= null) && flag2)){ + while ((a_next_record = a_csv_reader.readNext())!= null){ if( i==0 ){ + getCSVHeader(Arrays.copyOf(a_next_record,12),"a"); i++; } else{ String[] values = Arrays.copyOf(a_next_record,12); setNewValue(values, ACTIVITY_ITEM_NAME,"activity"); - HttpResponse response= Request.Get(ACTIVITY_URL).execute().returnResponse(); - String status = response.getStatusLine().toString(); - if(status.contains("200")){ - flag1 = true; - logger.info("activity should be (read direct from CSV): " + a_next_record[12]); - logger.info(EntityUtils.toString(response.getEntity())); - logger.info("get activity from web server: response 200 ok"); - }else{ - flag1 = false; - flag2 = false; - logger.info("can not get the activity from the web server"); - } int j = 0; - while((((p_next_record = p_csv_reader.readNext()) != null) && flag1)) { - if( j==0 ){ + while(((p_next_record = p_csv_reader.readNext()) != null)) { + if( j == 0 ){ getCSVHeader(Arrays.copyOf(p_next_record,2),"p"); j++; }else{ String[] values1 = Arrays.copyOf(p_next_record,2); setNewValue(values1, PREFERENCE_ITEM_NAME,"preference"); + // wait for 1s + try{Thread.sleep(TIME_PERIOD);}catch (InterruptedException e){e.printStackTrace();} + HttpResponse response= Request.Get(ACTIVITY_URL).execute().returnResponse(); HttpResponse response1= Request.Get(PREFERENCE_URL).execute().returnResponse(); - String status1=response1.getStatusLine().toString(); - if(status1.contains("200")){ - flag2 = true; - logger.info("get the iris1_item preference from web server: response 200 ok, value is: "+EntityUtils.toString(response1.getEntity())); - }else {flag2 = false; - logger.info("can not get the iris1_item from the web server");} + //check response + checkResult(response, a_next_record); + checkResult(response1, p_next_record); break; } } } + } } catch (Exception e){ @@ -113,7 +104,6 @@ public class Benchmark { } private void setNewValue(String[] values, String[] name, String file_typ){ - int TIME_PERIOD = 1000; if(file_typ.equals("activity")) { int i = 0; @@ -137,8 +127,6 @@ public class Benchmark { }else{ String uri= ERASER_ITEM_URI + "w_brightness" +"/state"; try { - logger.info("debug for w_brigntess"); - logger.info(values[1]); HttpResponse httpResponse = Request.Put(uri) .bodyString(values[1], ContentType.TEXT_PLAIN) .execute().returnResponse(); @@ -150,7 +138,7 @@ public class Benchmark { e.printStackTrace(); } } - try{Thread.sleep(TIME_PERIOD);}catch (InterruptedException e){e.printStackTrace();} + } private void getCSVHeader(String[] a_values,String csv_typ){ @@ -160,4 +148,40 @@ public class Benchmark { PREFERENCE_ITEM_NAME = a_values; } } + private void checkResult(HttpResponse response,String[] record){ + int status = response.getStatusLine().getStatusCode(); + if(status == 200 && record.length == 13){ + logger.info("activity should be (read direct from CSV): " + record[12]); + try { + logger.info(EntityUtils.toString(response.getEntity())); + }catch (IOException e){ + e.printStackTrace(); + } + logger.info("get activity from web server: response 200 ok"); + + }else if(status ==200 && record.length == 4){ + logger.info("preference should be (read direct from CSV): " + getPreference(record)); + try { + logger.info("get the iris1_item preference from web server: response 200 ok, value is: " + + EntityUtils.toString(response.getEntity())); + }catch (IOException e){ + e.printStackTrace(); + } + + }else if(status != + 200 &&record.length == 13){ + logger.info("can not get the activity from the web server"); + + } + else if(status != 200 && record.length == 4){ + logger.info("can not get the iris1_item from the web server"); + }else { + logger.info("unknown check"); + } + } + + private String getPreference(String[] record){ + return ""; + + } } \ No newline at end of file diff --git a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java index ac7536cae53749132be31ebe028e5ec0e55c30f4..640ef4e751e888f4e4ee13fe73868c794e3337a4 100644 --- a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java +++ b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java @@ -5,7 +5,7 @@ public class Main { public static void main(String[] args) { String A_CSV_FILE_PATH = "../datasets/backup/activity_data.csv"; String P_CSV_FILE_PATH = "../datasets/backup/preference_data.csv"; - Benchmark benchmark=new Benchmark(A_CSV_FILE_PATH,P_CSV_FILE_PATH); + Benchmark benchmark = new Benchmark(A_CSV_FILE_PATH,P_CSV_FILE_PATH); benchmark.start(); } } diff --git a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java index 4adfd683365a749a1dbf667fe3e1b413acf06018..cdf3e9d03c99e48df645c8df8dfcbd6eac754a8d 100644 --- a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java +++ b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java @@ -168,11 +168,11 @@ public class EraserStarter { newData.add(item10); newData.add(item11); newData.add(item12); - handler.newData(newData); + handler.newData(newData);*/ List<ItemPreference> preference=handler.classify().getPreferences(); for(ItemPreference preference1 : preference){ preference1.apply(); - }*/ + } } // initialize preference learning @@ -197,11 +197,11 @@ public class EraserStarter { ArrayList<Item> newData1 = new ArrayList<>(); newData1.add(activity_item); newData1.add(brightness_item); - handler.newData(newData1); + handler.newData(newData1);*/ List<ItemPreference> preference=handler.classify().getPreferences(); for(ItemPreference preference1 : preference){ preference1.apply(); - }*/ + } } machineLearningRoot.getPreferenceLearning().connectItems(settings.preference.items); diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java index d6c86be5a5e6bd64311066fb7225cfc66194558e..2519d4fdf16e26634e5b053d3870ca3baa579f5a 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java @@ -151,7 +151,7 @@ public class Learner { String activity_predictor(String[] new_data){ logger.info("Activity predicting ... ..."); String activity_result; - activityDataAnalyser("datasets/backup/activity_data.csv"); + activityDataAnalyser("../datasets/backup/activity_data.csv"); BasicNetwork activity_method = (BasicNetwork) loadObject(save_activity_model_file); MLData input = activity_helper.allocateInputVector(); activity_helper.normalizeInputVector(new_data,input.getData(),false); @@ -166,7 +166,7 @@ public class Learner { logger.info("Activity predicting ... ..."); String[] preference_result; preference_result = new String[2]; - preferenceDataAnalyser("datasets/backup/preference_data.csv"); + preferenceDataAnalyser("../datasets/backup/preference_data.csv"); BasicNetwork preference_method = (BasicNetwork)loadObject(save_preference_model_file); MLData input = preference_helper.allocateInputVector(); preference_helper.normalizeInputVector(new_data, input.getData(),false); @@ -187,5 +187,3 @@ public class Learner { } } - - diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java index 90c1837d60e5d53325f9a4a30ca59f1096e8e778..f536026f95b47dab38c1acb695284bd31b5728ea 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java @@ -132,9 +132,9 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn new_data[1]=item.getStateAsString(); } } + this.preference_result=learner.preference_predictor(new_data); logger.info("debug for p"); logger.info(Arrays.toString(preference_result)); - this.preference_result=learner.preference_predictor(new_data); } } @@ -169,11 +169,12 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn for (int i=0; i< activites.length;i++){ if(activites[i].equals(activityStringValue)){ activityItem.setStateFromString(String.valueOf(i)); + ItemPreference classifiedActivity = new ItemPreferenceDouble(activityItem,i); + return new MachineLearningResultImpl(classifiedActivity); } + logger.debug("Classify would return activity: {}", activityStringValue); } - logger.debug("Classify would return activity: {}", activityStringValue); - ItemPreference classifiedActivity = new ItemPreferenceDouble(activityItem, 0); - return new MachineLearningResultImpl(classifiedActivity); + case GOAL_PREFERENCE_BRIGHTNESS_IRIS: // String[] preference = {result[1], result[2]}; // FIXME what is the meaning of result[1] and result[2] diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java index 7aa90f90c0c917d566661b648bf494b6116c6b1a..f6de59fbc7683e254b5108f0202fbfaa36f7ae99 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java @@ -13,11 +13,12 @@ public class Main { * */ //ReaderCSV reader = new ReaderCSV("datasets/backup/activity_data.csv","preference"); //reader.updater(); - Learner learner=new Learner(); + //Learner learner=new Learner(); //learner.preference_train("../datasets/backup/preference_data.csv"); - learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); + //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); + activity_validation_learner(); //0.5793968,1.2126632,-4.6244006,-0.030779,0.801127,0.590978,-3.1411927,-0.93373865,-0.31124622,-0.35992432,0.33746338,-0.79608154,dancing - String[] new_data = new String[12]; + /*String[] new_data = new String[12]; new_data[0]="0.5793968"; new_data[1]="1.2126632"; new_data[2]="-4.6244006"; @@ -123,45 +124,53 @@ public class Main { //System.out.println("perference is: "+ result[1]);**/ } public static void activity_validation_learner(){ - ReadCSV csv = new ReadCSV("datasets/backup/activity_data.csv", false, CSVFormat.DECIMAL_POINT); - String[] line = new String[12]; - Learner learner=new Learner(); + ReadCSV csv = new ReadCSV("datasets/backup/activity_data.csv", true, CSVFormat.DECIMAL_POINT); + String[] line = new String[11]; + Learner learner = new Learner(); + learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); int wrong=0; int right=0; + int i =0; while(csv.next()) { - StringBuilder result = new StringBuilder(); - line[0] = csv.get(0); - line[1] = csv.get(1); - line[2] = csv.get(2); - line[3] = csv.get(3); - line[4] = csv.get(4); - line[5] = csv.get(5); - line[6] = csv.get(6); - line[7] = csv.get(7); - line[8] = csv.get(8); - line[9] = csv.get(9); - line[10] = csv.get(10); - line[11] = csv.get(11); - String correct = csv.get(12); - String irisChosen = learner.predictor(line)[0]; - result.append(Arrays.toString(line)); - result.append(" -> predicted: "); - result.append(irisChosen); - result.append("(correct: "); - result.append(correct); - result.append(")"); - if (irisChosen.equals(correct)!=true){ - System.out.println(correct); - System.out.println(irisChosen); - ++wrong; - }else{ - ++right; + if(i==0){ + i++; + + }else { + StringBuilder result = new StringBuilder(); + line[0] = csv.get(0); + line[1] = csv.get(1); + line[2] = csv.get(2); + line[3] = csv.get(3); + line[4] = csv.get(4); + line[5] = csv.get(5); + line[6] = csv.get(6); + line[7] = csv.get(7); + line[8] = csv.get(8); + line[9] = csv.get(9); + line[10] = csv.get(10); + //line[11] = csv.get(11); + String correct = csv.get(11); + String irisChosen = learner.predictor(line)[0]; + result.append(Arrays.toString(line)); + result.append(" -> predicted: "); + result.append(irisChosen); + result.append("(correct: "); + result.append(correct); + result.append(")"); + if (irisChosen.equals(correct)!=true){ + System.out.println(correct); + System.out.println(irisChosen); + ++wrong; + }else{ + ++right; + } + System.out.println(result.toString()); } - System.out.println(result.toString()); - } - System.out.println("wrong number"+wrong); - System.out.println("right number"+right); - //double validation = (double(right))/(double(wrong+right)); - //System.out.println("%.2f"+validation); + System.out.println("wrong number"+wrong); + System.out.println("right number"+right);} + + + //double validation = (double(right))/(double(wrong+right)); + //System.out.println("%.2f"+validation); } }