Skip to content
Snippets Groups Projects
Commit 0d9f3fc2 authored by René Schöne's avatar René Schöne
Browse files

Squashed commit of branch 'learner'

- Fixed pattern to parse datetime coming from openHAB.
- add benchmark
- Create RecognitionEvents in component Plan.
- Add expression printing and fix expression tests.
- Fixing tests.
- Remove build artefacts of datasets module.
- Fixing item behavior.
- Fix bug when adding item using REST API.
  - More debug output for REST application and MQTT receiver
  - Flush cache if new MQTT Host is set
- first integration for test
- update integration activity ML
- add item room_brightness
- add ML Items in starter file
- fix import error
- update newData function
- Fix Learner bugs.
  - Let ExternalMachineLearningModel.check() return true instead of throwing an exception
  - In Learner, use temporary files to store encog model
  - In MachineLearningImpl, do not use result for now (as newData won't work at the moment)
  - Minor fixes for base (add logger, add correct input to jastadd gradle task)
- Progressing to integration of machine learning.
  - Added setKnowledgeBase to MachineLearningEncoder and -Decoder, and removed Root argument in other methods
  - Changed Learner-Impl to match new adapters
  - Updated starter to new adapters, and to use CSV files for initialization of learner
- update readercsv
- Fix imports and dependencies.
- Fix errors with changed MachineLearningEncoder interface.
- upate learner
- add ML interfaces
- implement decode encode
- learner with activity and preference
parent 4221d160
No related branches found
No related tags found
No related merge requests found
Showing
with 1430 additions and 151 deletions
...@@ -24,28 +24,29 @@ load: ...@@ -24,28 +24,29 @@ load:
# Model for activity recognition. If dummy is true, then the file parameter is ignored. # Model for activity recognition. If dummy is true, then the file parameter is ignored.
activity: activity:
# File to read in. Expected format = eg # File to read in. Expected format = csv /Users/boqi/eraser/datasets
file: activity.eg file: ../datasets/backup/activity_data.csv
external: true
# Use dummy model in which the current activity is directly editable. Default: false. # Use dummy model in which the current activity is directly editable. Default: false.
dummy: true dummy: false
# Model id. Default: 1. # Model id. Default: 1.
id: 1 id: 1
# Item to change with classification result
affectedItem: activity
# Model for preference learning. If dummy is true, then the file parameter is ignored. # Model for preference learning. If dummy is true, then the file parameter is ignored.
preference: preference:
# File to read in. Expected format = eg # File to read in. Expected format = csv
file: preference.eg file: ../datasets/backup/preference_data.csv
external: true
# Use dummy model in which the current activity is directly editable. Default: false. # Use dummy model in which the current activity is directly editable. Default: false.
dummy: false dummy: false
# Model id. Default: 1. # Model id. Default: 1.
id: 1 id: 1
# Items to connect to inputs # Items to connect to inputs
items: items:
- datetime_month - activity
- datetime_day - w_brightness
- datetime_hour
- datetime_minute
# - activity
# Item to change with classification result # Item to change with classification result
affectedItem: iris1_item affectedItem: iris1_item
......
connection.project.dir=..
eclipse.preferences.version=1
...@@ -8,6 +8,13 @@ dependencies { ...@@ -8,6 +8,13 @@ dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12' testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '2.0.0.0' testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '2.0.0.0'
compile group: 'org.encog', name: 'encog-core', version: '3.4' compile group: 'org.encog', name: 'encog-core', version: '3.4'
implementation group: 'com.opencsv', name: 'opencsv', version: '4.1'
implementation group: 'commons-io', name: 'commons-io', version: '2.5'
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.8'
implementation group: 'org.apache.httpcomponents', name: 'fluent-hc', version: '4.5.8'
// https://mvnrepository.com/artifact/org.apache.spark/spark-mllib
//runtime group: 'org.apache.spark', name: 'spark-mllib_2.10', version: '1.3.0'
compile group: 'com.sparkjava', name: 'spark-core', version: '2.9.0'
} }
run { run {
......
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import java.io.*;
import java.util.*;
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
public class CsvTransfer {
public static void main(String[] args){
Learner learner=new Learner();
learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
}
//learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
/**private static final String CSV_FILE_PATH
= "datasets/backup/activity_data_example.csv";
private static final String OUTPUT_FILE_PATH
= "datasets/backup/activity_data.csv";
public static void main(String[] args)
{
addDataToCSV(CSV_FILE_PATH, OUTPUT_FILE_PATH);
}
public static void addDataToCSV(String input, String output)
{
File input_file = new File(input);
File output_file = new File(output);
try {
// create FileWriter object with file as parameter
FileReader reader = new FileReader(input_file);
CSVReader csv_reader = new CSVReader(reader);
String[] nextRecord;
FileWriter writer = new FileWriter(output_file);
CSVWriter csv_writer = new CSVWriter(writer, ',',
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
List<String[]> data = new ArrayList<String[]>();
while ((nextRecord = csv_reader.readNext()) != null) {
data.add(nextRecord);
for (String cell : nextRecord) {
System.out.print(cell + "\t");
}
System.out.println();
}
csv_writer.writeAll(data);
writer.close();
csv_reader.close();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
}
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class DummyPreference {
private static String activity; //Activity: walking, reading, working, dancing, lying, getting up
private static String watch_brightness; //dark: <45; dimmer 45-70; bright >70;
private static String light_color_openhab_H; //red 7; green 120; blue 240; yellow 60; sky blue 180; purple 300;
private static String brightness_output; //1-100**/
private static Random random = new Random();
public static void main(String[] args) {
creator();
}
static void creator(){
try{
FileWriter writer = new FileWriter("datasets/backup/preference_data.csv",true);
CSVWriter csv_writer = new CSVWriter(writer, ',',
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
//activity="walking" green
activity ="walking";
// activity ="reading";
csv_writer.writeAll(generator("walking","green"));
csv_writer.writeAll(generator("reading","sky blue"));
csv_writer.writeAll(generator("working","blue"));
csv_writer.writeAll(generator("dancing","purple"));
csv_writer.writeAll(generator("lying","red"));
csv_writer.writeAll(generator("getting up","yellow"));
csv_writer.close();
writer.close();
}catch (IOException e){e.printStackTrace();}
}
static List<String[]> generator(String activity_input, String color){
List<String[]> data = new ArrayList<String[]>();
activity = activity_input;
light_color_openhab_H =color;
//100 walking with different lighting intensity
for (int i=0; i<100; i++){
String[] add_data = new String[4];
int brightness = random.nextInt(3000);
System.out.println(brightness);
if (brightness<45){
watch_brightness = "dark";
brightness_output ="100";
}else if(45<=brightness && brightness<200){
watch_brightness = "dimmer";
brightness_output ="40";
}else if( 200<=brightness && brightness<1000){
watch_brightness = "medium";
brightness_output ="70";
}else{
watch_brightness = "bright";
brightness_output ="0";
}
add_data[0] = activity;
add_data[1] = watch_brightness;
add_data[2] = light_color_openhab_H;
add_data[3] = brightness_output;
data.add(add_data);
}
return data;
}
}
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup; package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import java.io.File; import java.io.File;
import java.net.MalformedURLException; import java.io.IOException;
import java.net.URL; //import java.util.ArrayList;
import java.util.Arrays; //import com.sun.javafx.tools.packager.Log;
import org.apache.logging.log4j.LogManager;
import com.sun.javafx.tools.packager.Log; import org.apache.logging.log4j.Logger;
import org.encog.ConsoleStatusReportable; //import org.encog.ConsoleStatusReportable;
import org.encog.Encog; import org.encog.Encog;
import org.encog.bot.BotUtil; import org.encog.ml.MLClassification;
import org.encog.ml.MLInput; //import org.encog.ml.MLRegression;
import org.encog.ml.MLRegression;
import org.encog.ml.data.MLData; import org.encog.ml.data.MLData;
import org.encog.ml.data.versatile.NormalizationHelper; import org.encog.ml.data.versatile.NormalizationHelper;
import org.encog.ml.data.versatile.VersatileMLDataSet; import org.encog.ml.data.versatile.VersatileMLDataSet;
...@@ -22,8 +21,6 @@ import org.encog.ml.factory.MLMethodFactory; ...@@ -22,8 +21,6 @@ import org.encog.ml.factory.MLMethodFactory;
import org.encog.ml.model.EncogModel; import org.encog.ml.model.EncogModel;
import org.encog.neural.networks.BasicNetwork; import org.encog.neural.networks.BasicNetwork;
import org.encog.util.csv.CSVFormat; import org.encog.util.csv.CSVFormat;
import org.encog.util.csv.ReadCSV;
import org.encog.util.simple.EncogUtility;
import static org.encog.persist.EncogDirectoryPersistence.*; import static org.encog.persist.EncogDirectoryPersistence.*;
public class Learner { public class Learner {
...@@ -31,129 +28,163 @@ public class Learner { ...@@ -31,129 +28,163 @@ public class Learner {
/** /**
* intial train * intial train
* */ * */
private String csv_url_activity; private File save_activity_model_file;
private String csv_url_perference; private File save_preference_model_file;
private String save_activity_model_file = "datasets/backup/activity_model.eg";
private String save_perference_model_file = "datasets/backup/preference_model.eg";
private File csv_file; private File csv_file;
private VersatileDataSource souce; private VersatileMLDataSet a_data;
private VersatileMLDataSet data; private VersatileMLDataSet p_data;
private EncogModel model; private EncogModel a_model;
private EncogModel p_model;
private NormalizationHelper activity_helper; private NormalizationHelper activity_helper;
private NormalizationHelper preference_helper; private NormalizationHelper preference_helper;
private MLRegression best_method; private MLClassification a_best_method;
private String[] new_data; private MLClassification p_best_method;
private String activity_result; private final Logger logger = LogManager.getLogger(Learner.class);
private String preference_result;
public Learner() {
try {
save_activity_model_file = File.createTempFile("activity_model", "eg");
} catch (IOException e) {
// use local alternative
save_activity_model_file = new File("activity_model.eq");
}
try {
save_preference_model_file = File.createTempFile("preference_model", "eg");
} catch (IOException e) {
// use local alternative
save_preference_model_file = new File("preference_model.eg");
}
save_activity_model_file.deleteOnExit();
save_preference_model_file.deleteOnExit();
}
private void activityDataAnalyser(String activity_csv_url){ private void activityDataAnalyser(String activity_csv_url){
this.csv_url_activity = activity_csv_url; VersatileDataSource a_souce;
String csv_url_activity;
csv_url_activity = activity_csv_url;
this.csv_file = new File(csv_url_activity); this.csv_file = new File(csv_url_activity);
souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT); a_souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
data = new VersatileMLDataSet(souce); a_data = new VersatileMLDataSet(a_souce);
data.defineSourceColumn("monat", 0, ColumnType.continuous); String[] activity_inputs={"m_accel_x","m_accel_y", "m_accel_z",
data.defineSourceColumn("day", 1, ColumnType.continuous); "m_rotation_x","m_rotation_y", "m_rotation_z",
data.defineSourceColumn("hour", 2, ColumnType.continuous); "w_accel_x","w_accel_y", "w_accel_z",
data.defineSourceColumn("minute", 3, ColumnType.continuous); "w_rotation_x","w_rotation_y","w_rotation_z"
ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous); };
data.defineSingleOutputOthersInput(outputColumn); for(int i=0; i < activity_inputs.length; i++){
data.analyze(); a_data.defineSourceColumn(activity_inputs[i], i, ColumnType.continuous);
System.out.println("get data "); }
model = new EncogModel(data); ColumnDefinition outputColumn = a_data.defineSourceColumn("labels", 12, ColumnType.nominal);
model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD); a_data.defineSingleOutputOthersInput(outputColumn);
data.normalize(); a_data.analyze();
activity_helper = data.getNormHelper(); a_model = new EncogModel(a_data);
System.out.println(activity_helper.toString()); a_model.selectMethod(a_data, MLMethodFactory.TYPE_FEEDFORWARD);
a_data.normalize();
activity_helper = a_data.getNormHelper();
} }
private void perferenceDataAnalyser(String perference_csv_url){ private void preferenceDataAnalyser(String preference_csv_url){
this.csv_url_perference = perference_csv_url; VersatileDataSource p_source;
this.csv_file = new File(this.csv_url_perference); String csv_url_preference;
souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT); csv_url_preference = preference_csv_url;
data = new VersatileMLDataSet(souce); this.csv_file = new File(csv_url_preference);
data.defineSourceColumn("activity", 0, ColumnType.continuous); p_source = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
data.defineSourceColumn("brightness", 1, ColumnType.continuous); p_data = new VersatileMLDataSet(p_source);
data.defineSourceColumn("time", 2, ColumnType.continuous); p_data.defineSourceColumn("activity", 0, ColumnType.nominal);
data.defineSourceColumn("minute", 3, ColumnType.continuous); p_data.defineSourceColumn("w_brightness", 1, ColumnType.nominal);
ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous); ColumnDefinition outputColumn1 = p_data.defineSourceColumn("label1", 2, ColumnType.continuous);
data.defineSingleOutputOthersInput(outputColumn); ColumnDefinition outputColumn2 = p_data.defineSourceColumn("label2", 3, ColumnType.continuous);
data.analyze(); ColumnDefinition[] outputs = new ColumnDefinition[2];
model = new EncogModel(data); outputs[0] = outputColumn1;
model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD); outputs[1] = outputColumn2;
//model.setReport(new ConsoleStatusReportable()); p_data.defineMultipleOutputsOthersInput(outputs);
data.normalize(); p_data.analyze();
preference_helper = data.getNormHelper(); p_model = new EncogModel(p_data);
System.out.println(activity_helper.toString()); p_model.selectMethod(p_data, MLMethodFactory.TYPE_FEEDFORWARD);
p_data.normalize();
preference_helper = p_data.getNormHelper();
} }
void train(String activity_url,String perference_url){ void train(String activity_url,String preference_url){
activity_train(activity_url); activity_train(activity_url);
Log.info("activity training finished"); preference_train(preference_url);
preference_train(perference_url); Encog.getInstance().shutdown();
Log.info("preference training finished");
} }
private void activity_train(String activity_csv_url){
void activity_train(String activity_csv_url){
logger.info("Activity training is beginning ... ...");
activityDataAnalyser(activity_csv_url); activityDataAnalyser(activity_csv_url);
model.holdBackValidation(0.3, true, 1001); a_model.holdBackValidation(0.3, true, 1001);
model.selectTrainingType(data); a_model.selectTrainingType(a_data);
best_method = (MLRegression)model.crossvalidate(5, true); a_best_method = (MLClassification)a_model.crossvalidate(5, true);
System.out.println(best_method);
saveEncogModel(save_activity_model_file); saveEncogModel(save_activity_model_file);
logger.info("Activity training is finished ... ...");
Encog.getInstance().shutdown();
} }
private void preference_train(String perfence_csv_url){ void preference_train(String prefence_csv_url){
perferenceDataAnalyser(perfence_csv_url); logger.info("Preference training is beginning ... ...");
model.holdBackValidation(0.3, true, 1001); preferenceDataAnalyser(prefence_csv_url);
model.selectTrainingType(data); p_model.holdBackValidation(0.3, true, 1001);
best_method = (MLRegression)model.crossvalidate(5, true); p_model.selectTrainingType(p_data);
System.out.println(best_method); p_best_method = (MLClassification)p_model.crossvalidate(5, true);
saveEncogModel(save_perference_model_file); saveEncogModel(save_preference_model_file);
logger.info("Preference training is finished ... ...");
Encog.getInstance().shutdown();
} }
String[] predictor(String[] new_data){ String[] predictor(String[] new_data){
this.new_data = new_data; String[] preference_data = new String[2];
activityDataAnalyser("datasets/backup/activity_data.csv"); String[] result = new String[3];
perferenceDataAnalyser("datasets/backup/preference_data.csv"); String[] activity_data= new String[12];
String[] result = new String[2]; for(int i=0; i<new_data.length;i++){
result[0] = activity_predictor(); activity_data[i]=new_data[i];
result[1] = perference_predictor(); }
result[0] = activity_predictor(activity_data);
preference_data[0]=result[0];
preference_data[1]=new_data[12];
result[1] = preference_predictor(preference_data)[0];
result[2] = preference_predictor(preference_data)[1];
Encog.getInstance().shutdown(); Encog.getInstance().shutdown();
return result; return result;
} }
private String activity_predictor(){ String activity_predictor(String[] new_data){
BasicNetwork activity_method = (BasicNetwork) loadObject(new File(save_activity_model_file)); logger.info("Activity predicting ... ...");
String activity_result;
activityDataAnalyser("../datasets/backup/activity_data.csv");
BasicNetwork activity_method = (BasicNetwork) loadObject(save_activity_model_file);
MLData input = activity_helper.allocateInputVector(); MLData input = activity_helper.allocateInputVector();
String[] activity_new_data = new String[4]; activity_helper.normalizeInputVector(new_data,input.getData(),false);
activity_new_data[0] = new_data[0];
activity_new_data[1] = new_data[1];
activity_new_data[2] = new_data[2];
activity_new_data[3] = new_data[3];
activity_helper.normalizeInputVector(activity_new_data,input.getData(),false);
MLData output = activity_method.compute(input); MLData output = activity_method.compute(input);
System.out.println("input:"+input);
System.out.println("output"+output);
activity_result = activity_helper.denormalizeOutputVectorToString(output)[0]; activity_result = activity_helper.denormalizeOutputVectorToString(output)[0];
System.out.println("output activity"+ activity_result); Encog.getInstance().shutdown();
logger.debug("Activity Predictor result is: {}",activity_result);
return activity_result; return activity_result;
} }
private String perference_predictor(){ String[] preference_predictor(String[] new_data){
BasicNetwork preference_method = (BasicNetwork)loadObject(new File(save_perference_model_file)); logger.info("Activity predicting ... ...");
String[] preference_result;
preference_result = new String[2];
preferenceDataAnalyser("../datasets/backup/preference_data.csv");
BasicNetwork preference_method = (BasicNetwork)loadObject(save_preference_model_file);
MLData input = preference_helper.allocateInputVector(); MLData input = preference_helper.allocateInputVector();
String[] perference_new_data = new String[4]; preference_helper.normalizeInputVector(new_data, input.getData(),false);
perference_new_data[0] = activity_result;
perference_new_data[1] = new_data[4];
perference_new_data[2] = new_data[5];
perference_new_data[3] = new_data[6];
preference_helper.normalizeInputVector(perference_new_data, input.getData(),false);
MLData output = preference_method.compute(input); MLData output = preference_method.compute(input);
preference_result = preference_helper.denormalizeOutputVectorToString(output)[0]; preference_result[0] = preference_helper.denormalizeOutputVectorToString(output)[0];
preference_result[1] = preference_helper.denormalizeOutputVectorToString(output)[1];
Encog.getInstance().shutdown();
logger.debug("Preference Predictor result is, Color: {}",Math.round(Float.valueOf(preference_result[0])));
logger.debug("Preference Predictor result is, Brightness: {} ",Math.round(Float.valueOf(preference_result[1])));
return preference_result; return preference_result;
} }
private void saveEncogModel(File modelFile){
if (modelFile.equals(save_activity_model_file)) {
saveObject(modelFile, this.a_best_method);
} else {
saveObject(modelFile, this.p_best_method);
}
private void saveEncogModel(String model_file_url){
saveObject(new File(model_file_url), this.best_method);
} }
} }
......
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
//import com.sun.javafx.tools.packager.Log;
import de.tudresden.inf.st.eraser.jastadd.model.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
public class MachineLearningImpl implements MachineLearningDecoder, MachineLearningEncoder {
private List<Item> target_item_list;
private List<Item> relevant_item_list;
private String[] preference_result;
private Root root;
private final Logger logger = LogManager.getLogger(MachineLearningImpl.class);
private final Learner learner;
private final int goal;
public static final int GOAL_ACTIVITY_PHONE_AND_WATCH = 1;
public static final int GOAL_PREFERENCE_BRIGHTNESS_IRIS = 2;
public String activity_result;
private String[] activites= new String[]{"working", "walking", "dancing", "lying", "getting up", "reading"};
public MachineLearningImpl(Learner learner, int goal) {
this.learner = learner;
this.goal = goal;
}
@Override
public void setKnowledgeBaseRoot(Root root) {
this.root = root;
updateItems();
}
private void updateItems() {
OpenHAB2Model model = root.getOpenHAB2Model();
List<String> targetItemNames, relevantItemNames;
switch (this.goal) {
case GOAL_ACTIVITY_PHONE_AND_WATCH:
targetItemNames = Collections.singletonList("activity");
relevantItemNames = Arrays.asList(
"m_accel_x",
"m_accel_y",
"m_accel_z",
"m_rotation_x",
"m_rotation_y",
"m_rotation_z",
"w_accel_x",
"w_accel_y",
"w_accel_z",
"w_rotation_x",
"w_rotation_y",
"w_rotation_z"
);
break;
case GOAL_PREFERENCE_BRIGHTNESS_IRIS:
targetItemNames = Collections.singletonList("iris1_item");
relevantItemNames = Arrays.asList(
"activity",
"w_brightness"
);
break;
default:
logger.error("Unknown goal value ({}) set", this.goal);
targetItemNames = Collections.emptyList();
relevantItemNames = Collections.emptyList();
}
target_item_list = targetItemNames.stream()
.map(name -> resolve(model, name))
.filter(Objects::nonNull)
.collect(Collectors.toList());
relevant_item_list = relevantItemNames.stream()
.map(name -> resolve(model, name))
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
private Item resolve(OpenHAB2Model model, String id) {
Optional<Item> maybeItem = model.resolveItem(id);
if (maybeItem.isPresent()) {
return maybeItem.get();
} else {
logger.warn("Could not find item with id {}", id);
return null;
}
}
@Override
public void newData(List<Item> changedItems) {
/* String topic = changedItems.get(0).getTopic().toString();
if(topic.equals("oh2/samsung/items1")){
new_data[0]=changedItems.get(0).influxMeasurementName();
}
model.getOpenHAB2Model().items();
Item iris_item=model.getOpenHAB2Model().resolveItem("iris_item").get();
iris_item.getStateAsString();*/
/* FIXME either save state of unchanged items here (if only changed items are reported) <- pull model
or let knowledge base pass all relevant items <- push model
*/
if(this.goal==GOAL_ACTIVITY_PHONE_AND_WATCH){
String[] new_data = new String[12];
for (int i =0; i< new_data.length; i++){
new_data[i] ="0";
}
for(Item item: changedItems){
int i = 0;
for(Item item1: relevant_item_list){
if(item.getTopic().toString().equals(item1.getTopic().toString())){
new_data[i]=item.getStateAsString();
}
i++;
}
}
this.activity_result = learner.activity_predictor(new_data);
}else if(this.goal==GOAL_PREFERENCE_BRIGHTNESS_IRIS){
String[] new_data = new String[2];
for(Item item: changedItems){
if(root.getOpenHAB2Model().getActivityItem().equals(item))
{
String test=item.getStateAsString();
int index = Math.round(Float.valueOf(test));
new_data[0]=activites[index];
}
if(item.getID().equals("w_brightness")){
new_data[1]=item.getStateAsString();
}
}
this.preference_result=learner.preference_predictor(new_data);
}
}
@Override
public List<Item> getTargets() {
return target_item_list;
}
@Override
public List<Item> getRelevantItems() {
return relevant_item_list;
}
@Override
public void triggerTraining() {
logger.debug("Ignore trigger training call");
}
@Override
public Instant lastModelUpdate() {
return null;
}
@Override
public MachineLearningResult classify() {
switch (this.goal) {
case GOAL_ACTIVITY_PHONE_AND_WATCH:
String activityStringValue = activity_result;
Item activityItem = resolve(this.root.getOpenHAB2Model(), "activity");
//activityItem.setStateFromString(activityStringValue);
// FIXME how to translate activityStringValue to a number? or should activity item state better be a String?
for (int i=0; i< activites.length;i++){
if(activites[i].equals(activityStringValue)){
activityItem.setStateFromString(String.valueOf(i));
}
}
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]
Item iris1 = resolve(this.root.getOpenHAB2Model(), "iris1_item");
int color = 0;
int brightness = 0;
if (preference_result != null){
color = Math.round(Float.valueOf(preference_result[0]));
brightness = Math.round(Float.valueOf(preference_result[1]));
}
ItemPreference classifiedPreference = new ItemPreferenceColor(iris1, TupleHSB.of(color, 100, brightness));
return new MachineLearningResultImpl(classifiedPreference);
default:
logger.error("Unknown goal value ({}) set in classify", this.goal);
return new EmptyMachineLearningResult();
}
}
public void initActivities(String filenameOfCsv) {
logger.debug(filenameOfCsv);
learner.activity_train(filenameOfCsv);
}
public void initPreferences(String filenameOfCsv) {
learner.preference_train(filenameOfCsv);
}
class EmptyMachineLearningResult implements MachineLearningResult {
@Override
public List<ItemPreference> getPreferences() {
return Collections.emptyList();
}
}
}
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import de.tudresden.inf.st.eraser.jastadd.model.ItemPreference;
import de.tudresden.inf.st.eraser.jastadd.model.MachineLearningResult;
import java.util.Collections;
import java.util.List;
/**
* TODO: Add description.
*
* @author rschoene - Initial contribution
*/
public class MachineLearningResultImpl implements MachineLearningResult {
private final ItemPreference preference;
MachineLearningResultImpl(ItemPreference preference) {
this.preference = preference;
}
@Override
public List<ItemPreference> getPreferences() {
return Collections.singletonList(preference);
}
}
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup; package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import de.tudresden.inf.st.eraser.jastadd.model.*; import org.encog.util.csv.CSVFormat;
import org.encog.util.csv.ReadCSV;
import java.util.Arrays;
public class Main { public class Main {
...@@ -8,22 +11,154 @@ public class Main { ...@@ -8,22 +11,154 @@ public class Main {
/** /**
* new data from KB * new data from KB
* */ * */
String[] new_data = new String[7]; //ReaderCSV reader = new ReaderCSV("datasets/backup/activity_data.csv","preference");
new_data[0]="7"; //reader.updater();
new_data[1]="20"; Learner learner=new Learner();
new_data[2]="12"; //learner.preference_train("../datasets/backup/preference_data.csv");
new_data[3]="13"; //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
new_data[4]="7"; //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
new_data[5]="25"; /**String[] new_data = new String[12];
new_data[6]="12"; new_data[0]="0.5793968";
new_data[1]="1.2126632";
new_data[2]="-4.6244006";
new_data[3]="-0.030779";
new_data[4]="0.801127";
new_data[5]="0.590978";
new_data[6]="-3.1411927";
new_data[7]="-0.93373865";
new_data[8]="-0.31124622";
new_data[9]="-0.35992432";
new_data[10]="0.33746338";
new_data[11]="-0.79608154";
String result =learner.activity_predictor(new_data);
System.out.println(result);
List k=new ArrayList();
k.add(new_data);*/
//learner.preference_train("datasets/backup/preference_data.csv");
//learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
//walking,medium,120,70
//reading,bright,180,0
//activity_validation_learner();
//0.10654198,8.6574335,4.414908,0.040269,0.516884,0.853285,1.2066777,-1.1444284,9.648633,1.2207031E-4,-0.055358887,0.5834961 working
String[] new_data = new String[12];
new_data[0]="0.010773907";
new_data[1]="8.610746";
new_data[2]="4.4963107";
new_data[3]="0.047136";
new_data[4]="0.515427";
new_data[5]="0.852877";
new_data[6]="0.9720459";
new_data[7]="-1.3694834";
new_data[8]="9.696517";
new_data[9]="-0.0056152344";
new_data[10]="-0.049438477";
new_data[11]="0.5576782";
//0.010773907,8.610746,4.4963107,0.047136,0.515427,0.852877,0.9720459,-1.3694834,9.696517,-0.0056152344,-0.049438477,0.5576782 working
//0.9999999988939648,-0.9995820798966354,-0.9999999999999997,-0.9999988062118802,-0.9974031940544938,-1.0
//String result =learner.activity_predictor(new_data);
//System.out.println(result);
/**String[] new_data_1 =new String[12];
//-2.6252422,8.619126,-2.7030537,0.552147,0.5078,0.450302,-8.1881695,-1.2641385,0.038307227,-0.34222412,0.49102783,-0.016540527,walking
new_data_1[0]="-2.6252422";
new_data_1[1]="8.619126";
new_data_1[2]="-2.7030537";
new_data_1[3]="0.552147";
new_data_1[4]="0.5078";
new_data_1[5]="0.450302";
new_data_1[6]="-8.1881695";
new_data_1[7]="-1.2641385";
new_data_1[8]="0.038307227";
new_data_1[9]="-0.34222412";
new_data_1[10]="0.49102783";
new_data_1[11]="-0.016540527";
String result1 =learner.activity_predictor(new_data_1);
System.out.println(result1);
/** /**
* learner.train(activity_csv_url, preference_data_url) * learner.train(activity_csv_url, preference_data_url)
* learner.predictor get the result from predictor for new data * learner.predictor get the result from predictor for new data
* */ * */
/**String[] new_data_2 = new String[12];
//-6.5565214,5.717354,5.6658783,0.185591,0.464146,0.413321,-20.580557,3.8498764,-0.4261679,0.7647095,-0.4713745,0.23999023,dancing
new_data_2[0]="-6.5565214";
new_data_2[1]="5.717354";
new_data_2[2]="5.6658783";
new_data_2[3]="0.185591";
new_data_2[4]="0.464146";
new_data_2[5]="0.413321";
new_data_2[6]="-20.580557";
new_data_2[7]="3.8498764";
new_data_2[8]="-0.4261679";
new_data_2[9]="0.7647095";
new_data_2[10]="-0.4713745";
new_data_2[11]="0.23999023";
String[] new_data_3 = new String[12];
new_data_3[0]="-5.3881507";
new_data_3[1]="0.25378537";
new_data_3[2]="7.69257";
new_data_3[3]="-0.122974";
new_data_3[4]="0.247411";
new_data_3[5]="0.439031";
new_data_3[6]="4.9224787";
new_data_3[7]="-10.601525";
new_data_3[8]="-4.927267";
new_data_3[9]="0.7946167";
new_data_3[10]="0.35272217";
new_data_3[11]="0.16192627";
//"-5.3881507","0.25378537","7.69257","-0.122974","0.247411","0.439031","4.9224787","-10.601525","-4.927267","0.7946167","0.35272217","0.16192627","lying"
Learner learner=new Learner(); Learner learner=new Learner();
//learner.train("datasets/activity_data.csv", "datasets/preference_data.csv"); //learner.train("datasets/backup/activity_data.csv", "datasets/preference_data.csv");
String[] result = learner.predictor(new_data); String[] result = learner.predictor(new_data_3);
System.out.println("activity is:" + result[0]); System.out.println("activity is:" + result[0]);
System.out.println("perference is: "+ result[1]); //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();
int wrong=0;
int right=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;
}
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);
} }
} }
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import java.awt.*;
import java.io.FileReader;
import java.io.*;
import java.util.Arrays;
import com.opencsv.CSVReader;
import org.apache.http.client.fluent.Request;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ContentType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ReaderCSV{
//read every 5 s from csv
//activity CSV
/**
* Col 1: smartphone acceleration x
* Col 2: smartphone acceleration y
* Col 3: smartphone acceleration z
* Col 4: smartphone rotation x
* Col 5: smartphone rotation y
* Col 6: smartphone rotation z
* Col 7: watch acceleration x
* Col 8: watch acceleration y
* Col 9: watch acceleration z
* Col 10: watch rotation x
* Col 11: watch rotation y
* Col 12: watch rotation z/*/
//preference CSV
/**
* Col 1: Activity
* Col 2: watch brightness range "bright, medium, dimmer, dark"*/
private static int TIME_PERIOD = 5000; //5 second update new value
private String csv_file_path;
private String csv_typ;
private File file;
private FileReader file_reader;
private CSVReader csv_reader;
private String[] next_record;
private static final Logger logger = LogManager.getLogger(ReaderCSV.class);
private static final String ERASER_ITEM_URI = "http://localhost:4567/model/items/";
//TODO ITEM_NAME HAS TO BE DISCUSSED
private static final String[] ACTIVITY_ITEM_NAME = {
"m_accel_x", "m_accel_y", "m_accel_z", "m_rotation_x",
"m_rotation_y", "m_rotation_z", "w_accel_x", "w_accel_y",
"w_accel_z", "w_rotation_x", "w_rotation_y", "w_rotation_z"};
private static final String[] PREFERENCE_ITEM_NAME = {
"w_brightness"
};
//csv_type is activity or preference
public ReaderCSV(String csv_file_path, String csv_type) {
this.csv_file_path = csv_file_path;
this.csv_typ = csv_type;
}
public void updater(){
file=new File(csv_file_path);
try {
file_reader =new FileReader(file);
csv_reader = new CSVReader(file_reader);
while ((next_record = csv_reader.readNext()) != null) {
Thread.sleep(TIME_PERIOD);
if (csv_typ =="activity"){
String[] values = Arrays.copyOf(next_record,12);
setNewValue(values, ACTIVITY_ITEM_NAME);
} else {
String[] values = Arrays.copyOf(next_record,2);
setNewValue(values, PREFERENCE_ITEM_NAME);
}
}
}
catch (Exception e){
e.printStackTrace();
}
}
private void setNewValue(String[] values, String[] name){
if(this.csv_typ.equals("activity"))
{
int i = 0;
for(String value : values){
String uri = ERASER_ITEM_URI + name[i] + "/state";
logger.info("reader:",value);
try {
HttpResponse httpResponse = Request.Put(uri)
.bodyString(value, ContentType.TEXT_PLAIN)
.execute().returnResponse();
}catch (Exception e){
e.printStackTrace();
}
i+=1;
}
}else{
String uri= ERASER_ITEM_URI + "w_brightness" +"/state";
logger.info("reader:",values[1]);
try {
HttpResponse httpResponse = Request.Put(uri)
.bodyString(values[1], ContentType.TEXT_PLAIN)
.execute().returnResponse();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
\ No newline at end of file
package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
import de.tudresden.inf.st.eraser.jastadd.model.*;
import org.junit.Test;
import java.util.Set;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.fail;
/**
* TODO: Add description.
*
* @author rschoene - Initial contribution
*/
public class ATest {
@Test
public void test1() {
fail();
}
}
...@@ -2,9 +2,7 @@ package de.tudresden.inf.st.eraser.feedbackloop.plan; ...@@ -2,9 +2,7 @@ package de.tudresden.inf.st.eraser.feedbackloop.plan;
import de.tudresden.inf.st.eraser.feedbackloop.api.Execute; import de.tudresden.inf.st.eraser.feedbackloop.api.Execute;
import de.tudresden.inf.st.eraser.feedbackloop.api.Plan; import de.tudresden.inf.st.eraser.feedbackloop.api.Plan;
import de.tudresden.inf.st.eraser.jastadd.model.Activity; import de.tudresden.inf.st.eraser.jastadd.model.*;
import de.tudresden.inf.st.eraser.jastadd.model.ItemPreference;
import de.tudresden.inf.st.eraser.jastadd.model.Root;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
...@@ -38,9 +36,15 @@ public class PlanImpl implements Plan { ...@@ -38,9 +36,15 @@ public class PlanImpl implements Plan {
@Override @Override
public void planToMatchPreferences(Activity activity) { public void planToMatchPreferences(Activity activity) {
// TODO actually use activity
logger.info("Plan got new activity [{}]: {}", activity.getIdentifier(), activity.getLabel()); logger.info("Plan got new activity [{}]: {}", activity.getIdentifier(), activity.getLabel());
List<ItemPreference> preferences = knowledgeBase.currentPreferences(); List<ItemPreference> preferences = knowledgeBase.currentPreferences();
knowledgeBase.getMachineLearningRoot().addChangeEvent(createRecognitionEvent(activity));
informExecute(preferences); informExecute(preferences);
} }
private ChangeEvent createRecognitionEvent(Activity activity) {
RecognitionEvent result = RecognitionEvent.createRecognitionEvent(knowledgeBase.getMachineLearningRoot().getActivityRecognition());
result.setActivity(activity);
return result;
}
} }
#Tue May 07 14:40:56 CEST 2019
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
/build/
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
apply plugin: 'java'
apply plugin: 'application'
dependencies {
compile project(':eraser-base')
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.8.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.10.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.10.0'
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '1.0.0.0'
compile 'org.encog:encog-core:3.4'
}
run {
mainClassName = 'de.tudresden.inf.st.eraser.learner_test.Main'
standardInput = System.in
if (project.hasProperty("appArgs")) {
args Eval.me(appArgs)
}
}
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
package de.tudresden.inf.st.eraser.learner_test;
import org.encog.Encog;
import org.encog.ml.MLClassification;
import org.encog.ml.data.MLData;
import org.encog.persist.EncogDirectoryPersistence;
import org.encog.util.csv.CSVFormat;
import org.encog.util.csv.ReadCSV;
import org.encog.util.simple.EncogUtility;
import org.encog.ml.data.versatile.NormalizationHelper;
import org.encog.ml.data.versatile.VersatileMLDataSet;
import org.encog.ml.data.versatile.columns.ColumnDefinition;
import org.encog.ml.data.versatile.columns.ColumnType;
import org.encog.ml.data.versatile.sources.VersatileDataSource;
import org.encog.ml.data.versatile.sources.CSVDataSource;
import org.encog.ml.factory.MLMethodFactory;
import org.encog.ml.model.EncogModel;
import org.encog.ConsoleStatusReportable;
import org.encog.ml.MLRegression;
import java.io.File;
import java.util.Arrays;
import static org.encog.persist.EncogDirectoryPersistence.*;
public class Main {
public static void main(String[] args) {
//mapping the data into model
String savefile = "src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model.eg";
String File = "src/main/java/de/tudresden/inf/st/eraser/learner_test/preference_data.csv";
File file = new File(File);
VersatileDataSource source = new CSVDataSource(file, false, CSVFormat.DECIMAL_POINT);
VersatileMLDataSet data = new VersatileMLDataSet(source);
data.defineSourceColumn("monat", 0, ColumnType.continuous);
data.defineSourceColumn("day", 1, ColumnType.continuous);
data.defineSourceColumn("hour", 2, ColumnType.continuous);
data.defineSourceColumn("minute", 3, ColumnType.continuous);
ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous);
data.defineSingleOutputOthersInput(outputColumn);
data.analyze();
System.out.println("get data ");
EncogModel model = new EncogModel(data);
model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD);
//model.setReport(new ConsoleStatusReportable());
data.normalize();
NormalizationHelper helper = data.getNormHelper();
System.out.println(helper.toString());
model.holdBackValidation(0.3, true, 1001);
model.selectTrainingType(data);
MLRegression bestMethod = (MLRegression)model.crossvalidate(5, true);
MLClassification bestMethodtest=(MLClassification)model.crossvalidate(5,true);
/**System.out.println( "Training error: " + EncogUtility.calculateRegressionError(bestMethod, model.getTrainingDataset()));
System.out.println( "testTraining error: " + EncogUtility.calculateClassificationError(bestMethodtest, model.getTrainingDataset()));
System.out.println( "Validation error: " + EncogUtility.calculateRegressionError(bestMethod, model.getValidationDataset()));
System.out.println( "testValidation error: " + EncogUtility.calculateClassificationError(bestMethodtest, model.getValidationDataset()));
System.out.println(helper.getClass());
System.out.println(helper.toString());
System.out.println("Final model: " + bestMethod);
System.out.println("Final testmodel: " + bestMethodtest);**/
//NormalizationHelper helper = data.getNormHelper();
//test
String helperstr=helper.toString();
String [] split=helperstr.split(";");
String [] finalStr = split[split.length-1].replace("]","").replace("[","").
split(",");
System.out.println(helper);
// save network...
//to delete
saveObject(new File(savefile), bestMethodtest);
ReadCSV csv = new ReadCSV(File, false, CSVFormat.DECIMAL_POINT);
String[] line = new String[4];
MLData input = helper.allocateInputVector();
System.out.println("input test---------------");
System.out.println(input);
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);
String correct = csv.get(4);
helper.normalizeInputVector(line,input.getData(),false);
MLData output = bestMethod.compute(input);
System.out.println("inputs:");
System.out.println(input);
System.out.println("outputs:");
System.out.println(output);
String brightnessChosen = helper.denormalizeOutputVectorToString(output)[0];
result.append(Arrays.toString(line));
result.append(" -> predicted: ");
result.append(brightnessChosen);
result.append("(correct: ");
result.append(correct);
result.append(")");
System.out.println(result.toString());
break;
}
// Delete data file and shut down.
//File.delete();
Encog.getInstance().shutdown();
/**Training error: 0.299928703107046
testTraining error: 0.9931740614334471
Validation error: 0.41277024952020763
testValidation error: 0.992*/
}
}
7,20,12,13,2
7,20,14,40,1
7,20,14,40,2
7,21,13,2,2
7,21,13,2,2
7,21,14,23,2
7,21,14,23,2
7,21,15,41,2
7,21,16,54,2
7,21,16,54,2
7,21,17,45,3
7,22,12,28,3
7,22,15,35,2
7,22,15,35,2
7,22,18,59,3
7,22,18,59,3
7,23,12,32,2
7,23,12,32,2
7,23,16,7,2
7,23,16,7,2
7,23,16,7,2
7,23,16,7,2
7,23,16,7,2
7,24,12,4,0
7,24,12,4,0
7,24,12,4,1
7,24,14,38,2
7,24,14,38,2
7,24,18,54,3
7,25,12,31,0
7,25,12,32,1
7,25,12,32,1
7,25,15,6,3
7,25,18,56,3
7,26,13,41,2
7,26,19,14,3
7,27,11,39,2
7,27,11,39,3
7,27,11,46,3
7,27,11,46,2
7,27,13,8,2
7,27,13,8,2
7,27,13,9,2
7,27,13,45,2
7,27,13,45,2
7,27,15,38,3
7,28,12,12,2
7,28,12,13,2
7,28,12,41,2
7,28,12,41,2
7,28,12,41,2
7,28,14,0,1
7,28,14,0,2
7,28,15,21,3
7,28,18,56,3
7,29,10,9,1
7,29,10,9,1
7,29,10,9,1
7,29,11,54,0
7,29,11,54,0
7,29,11,54,0
7,29,11,54,1
7,29,14,10,2
7,29,16,44,2
7,29,16,44,2
7,30,16,7,3
7,30,18,45,3
7,31,13,2,0
7,31,13,2,1
7,31,13,3,1
7,31,13,3,1
7,31,13,3,1
7,31,18,39,3
8,1,12,22,0
8,1,12,22,1
8,1,14,20,2
8,1,14,20,2
8,1,14,20,2
8,1,15,55,3
8,1,18,31,3
8,1,18,37,3
8,1,18,37,3
8,1,19,2,3
8,1,19,2,3
8,1,20,5,3
8,2,10,9,2
8,2,10,9,1
8,2,10,9,2
8,2,10,9,2
8,2,13,58,2
8,2,13,58,2
8,2,15,44,3
8,2,15,44,3
8,2,15,44,3
8,2,17,21,3
8,2,17,21,3
8,2,17,21,3
8,3,13,31,1
8,3,13,31,2
8,3,13,32,2
8,3,16,43,3
8,4,13,20,1
8,4,13,20,2
8,4,18,27,3
8,5,13,37,2
8,5,13,37,2
8,5,18,33,3
8,6,11,24,3
8,6,11,24,3
8,6,11,24,3
8,6,13,50,3
8,7,13,4,2
8,7,13,4,2
8,7,14,56,3
8,8,12,13,2
8,8,12,13,2
8,8,15,51,2
8,8,15,51,2
8,8,15,51,3
8,9,13,32,2
8,9,13,32,2
8,9,13,32,2
8,9,15,8,2
8,9,15,8,2
8,9,15,8,2
8,9,16,19,2
8,10,11,32,0
8,10,11,32,1
8,10,11,32,1
8,10,13,13,1
8,10,13,13,1
8,10,13,13,2
8,10,16,42,3
8,10,16,42,3
8,11,14,6,2
8,11,14,7,2
8,11,18,54,3
8,11,18,54,3
8,11,18,54,3
8,12,12,27,1
8,12,12,27,1
8,12,12,28,1
8,12,13,53,2
8,12,13,53,2
8,12,13,53,2
8,12,15,21,3
8,13,13,16,1
8,13,13,16,1
8,13,13,16,1
8,13,14,14,2
8,13,14,14,2
8,13,16,11,3
8,13,17,18,3
8,14,13,7,1
8,14,13,7,1
8,14,13,7,1
8,14,13,7,1
8,14,13,7,2
8,14,13,7,2
8,14,15,6,3
8,15,14,5,2
8,15,14,5,2
8,15,14,6,2
8,15,14,6,2
8,15,16,41,3
8,15,16,41,3
8,15,17,30,3
8,16,13,40,2
8,16,13,40,2
8,16,17,52,3
8,16,17,53,3
8,17,13,34,1
8,17,13,35,2
8,17,14,7,2
8,17,19,2,3
8,18,10,21,3
8,18,11,14,2
8,18,11,14,2
8,18,11,14,2
8,18,11,14,2
8,18,14,25,2
8,18,14,25,3
8,18,14,25,2
8,18,18,18,3
8,18,18,19,3
8,19,18,33,3
8,19,18,33,3
8,19,18,33,3
8,19,18,33,3
8,20,14,28,2
8,20,14,28,2
8,20,14,28,2
8,20,14,28,2
8,20,17,8,3
8,20,18,22,3
8,21,11,24,1
8,21,11,24,1
8,21,11,24,1
8,21,15,34,3
8,21,18,55,3
8,22,12,3,1
8,22,12,4,2
8,22,12,4,2
8,22,13,51,2
8,22,13,51,2
8,22,13,51,2
8,22,18,12,3
8,22,18,12,3
8,22,18,12,3
8,22,18,12,3
8,22,18,40,3
8,22,18,40,3
8,23,13,42,1
8,23,13,42,1
8,23,17,32,3
8,23,19,28,3
8,23,20,27,3
8,23,20,27,3
8,23,21,49,3
8,24,14,0,2
8,24,14,0,2
8,24,14,0,2
8,24,14,0,2
8,24,15,4,3
8,24,15,4,3
8,24,16,2,3
8,24,16,3,3
8,24,16,37,3
8,24,17,9,3
8,24,17,14,3
8,25,13,34,1
8,25,13,34,1
8,25,13,34,1
8,25,13,34,1
8,25,13,34,1
8,25,15,1,3
8,25,17,58,3
8,26,10,29,0
8,26,10,29,0
8,26,10,29,0
8,26,10,29,0
8,26,10,29,0
8,26,16,42,3
8,26,16,42,3
8,26,18,41,3
8,26,18,41,3
8,27,13,41,2
8,27,13,41,2
8,27,13,41,2
8,27,13,41,2
8,27,17,42,3
8,28,11,9,1
8,28,11,9,1
8,28,12,14,0
8,28,12,14,1
8,28,12,14,0
8,28,15,3,2
8,28,15,3,2
8,28,16,31,3
8,28,17,40,3
8,29,14,44,3
8,29,17,25,3
8,30,12,5,0
8,30,12,5,0
8,30,12,5,0
8,30,13,32,1
8,30,13,32,1
8,30,13,56,2
8,30,14,23,2
8,30,14,23,2
8,30,14,23,2
8,30,14,23,2
8,30,14,41,2
8,30,14,41,2
8,30,14,41,2
8,30,15,50,3
8,30,17,0,3
8,30,18,59,3
8,30,18,59,3
8,31,14,31,2
8,31,14,31,2
8,31,14,31,2
8,31,17,59,3
8,31,18,0,3
9,1,16,13,3
9,1,16,13,3
9,1,16,13,3
9,1,17,41,3
9,2,13,44,1
9,2,13,44,1
9,2,13,44,1
9,2,14,49,2
9,2,14,49,2
9,2,14,49,2
9,2,16,6,3
9,2,16,6,3
9,2,17,2,3
9,3,16,9,3
9,3,17,35,3
9,3,17,36,3
9,4,12,57,1
9,4,12,57,1
9,4,15,8,3
9,4,15,34,3
9,4,16,26,3
9,4,16,26,3
9,4,18,37,3
9,4,18,37,3
9,4,18,37,3
9,6,11,18,0
9,6,11,18,0
9,6,12,54,1
9,6,12,54,1
9,6,14,21,2
9,6,14,21,2
9,6,19,20,3
9,7,11,50,0
9,7,14,17,2
9,7,14,57,3
9,7,14,57,3
9,7,16,56,3
9,7,16,56,3
9,7,16,56,3
9,7,16,56,3
9,7,18,38,3
9,7,18,38,3
9,8,11,4,2
9,8,11,4,2
9,8,11,13,0
9,8,11,13,0
9,8,11,13,0
9,8,11,13,0
9,8,11,13,0
9,8,11,14,0
9,8,11,14,1
9,8,11,14,1
9,8,12,1,0
9,8,12,1,0
9,8,12,1,0
9,8,12,1,0
9,8,12,1,0
9,8,12,1,1
9,8,12,36,0
9,8,12,36,0
9,8,12,36,0
9,8,12,36,0
9,8,12,36,0
9,8,13,37,1
9,8,13,37,1
9,8,13,37,1
9,8,14,20,2
9,8,14,20,2
9,8,18,20,3
9,9,12,47,1
9,9,12,47,2
9,9,12,47,2
9,9,19,5,3
9,10,13,15,1
9,10,13,15,1
9,10,13,15,0
9,10,16,49,3
9,10,19,6,3
9,10,21,5,3
9,11,14,16,2
9,11,14,16,2
9,11,14,16,2
9,11,18,41,3
9,12,14,43,2
9,12,14,43,2
9,12,14,43,2
9,12,16,14,3
9,12,17,12,3
9,12,17,12,2
9,12,17,12,3
9,12,17,12,2
9,12,20,44,3
9,13,19,52,3
9,14,14,39,2
9,14,14,39,2
9,14,15,14,3
9,14,17,29,3
9,14,17,29,3
9,14,17,29,3
9,15,11,41,1
9,15,11,41,1
9,15,13,4,1
9,15,14,3,1
9,15,14,3,2
9,16,12,36,1
9,16,12,36,1
9,16,12,36,1
9,16,12,36,1
9,16,12,48,1
9,16,12,48,1
9,16,13,51,1
9,16,13,51,2
9,16,13,51,1
9,16,15,13,3
9,16,15,14,3
9,16,15,14,3
9,17,10,27,0
9,17,10,27,0
9,17,11,10,0
9,17,11,10,0
9,17,11,10,0
9,17,12,43,1
9,17,12,43,1
9,17,12,43,1
9,17,13,32,1
9,17,13,32,1
9,17,14,5,1
9,17,14,5,2
9,17,14,6,2
9,17,15,7,3
9,17,15,49,3
9,17,15,49,3
9,17,18,12,3
9,17,18,13,3
encog,BasicNetwork,java,3.4.0,1,1554196571101
[BASIC]
[BASIC:PARAMS]
[BASIC:NETWORK]
beginTraining=0
connectionLimit=0
contextTargetOffset=0,0,0
contextTargetSize=0,0,0
endTraining=2
hasContext=f
inputCount=4
layerCounts=1,8,5
layerFeedCounts=1,7,4
layerContextCount=0,0,0
layerIndex=0,1,9
output=0.2537517424,0.3154675575,-0.8739039638,-0.4408848221,-0.8484433638,-0.999915299,-0.6964984771,-0.208278439,1,0,0,-0.4545454545,0.3559322034,1
outputCount=1
weightIndex=0,8,43
weights=0.5976774048,-0.7925906525,0.7127327881,-0.9611660362,0.8031350986,-0.7286657218,1.0990482817,-0.5985785536,-0.0783115433,0.575612931,1.1267500918,1.7184744034,0.2271044512,-1.0525796764,0.0900869671,1.1492323512,0.6141715555,-1.0455927965,-0.0925453451,0.2471651431,2.3634316872,0.3939369257,0.4607437082,-0.1435186798,0.8428535365,-0.0848896791,-0.070602589,-1.2640263565,2.4899996734,-0.2185394776,10.3421332361,-0.1650898311,-0.2750133571,-0.79680959,-0.8051139953,0.8219933747,-0.0727160299,-0.4609522002,-1.0410685492,-0.5354063412,0.3028724456,-0.6835374219,0.169591233
biasActivation=0,1,1
[BASIC:ACTIVATION]
"org.encog.engine.network.activation.ActivationTANH"
"org.encog.engine.network.activation.ActivationTANH"
"org.encog.engine.network.activation.ActivationLinear"
encog,BasicNetwork,java,3.4.0,1,1548158734516
[BASIC]
[BASIC:PARAMS]
[BASIC:NETWORK]
beginTraining=0
connectionLimit=0
contextTargetOffset=0,0,0
contextTargetSize=0,0,0
endTraining=2
hasContext=f
inputCount=4
layerCounts=4,8,5
layerFeedCounts=4,7,4
layerContextCount=0,0,0
layerIndex=0,4,12
output=0.6991387348,-0.8711034513,-0.996886038,-0.832747291,-0.0935682806,-0.9996163977,0.5399150265,0.9411173394,-0.5084989975,0.4850010791,0.9999999957,1,0,-0.6666666667,-0.4545454545,0.6949152542,1
outputCount=4
weightIndex=0,32,67
weights=-2.6901880743,0.6512821123,-1.2270002115,1.63124668,0.1982387305,-0.2994789552,1.5833040739,-0.9450411677,2.0541422847,-0.718279397,-1.1761952241,0.5028631512,0.0690323612,-1.496141565,-0.1955149568,-0.7453976822,-0.3691141073,0.9854755554,2.2113850088,-1.5216550292,0.9652087936,-1.3028209693,-1.3346156171,0.4142247818,1.0821207364,0.1987534858,0.6202881884,-0.2940331887,-1.4643282498,2.6960334656,-0.0167663298,-2.9907087565,0.3469960227,-0.0441249736,-2.5998575813,-0.7106361301,-0.8111809962,2.2216158678,-0.5482762437,-1.7996398291,-3.6734127565,-2.9102547958,0.4845401914,0.3760471288,-0.0124987546,0.3784047483,0.5860932613,-0.2682876707,0.7429004186,-7.559247176,-3.4421363532,1.1989747484,-2.3340717496,-1.4740773042,-0.7795788072,-1.8241693655,-0.630132295,-0.8191869009,-0.4060569987,-1.0997423162,-0.5495165849,0.1407829068,-2.2964930412,0.0798893221,-19.5271913755,2.0474187009,-0.2622671892
biasActivation=0,1,1
[BASIC:ACTIVATION]
"org.encog.engine.network.activation.ActivationTANH"
"org.encog.engine.network.activation.ActivationTANH"
"org.encog.engine.network.activation.ActivationLinear"
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console">
<PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level} %c{1.} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/jastadd-mquat.log"
filePattern="logs/jastadd-mquat-%i.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
<Policies>
<OnStartupTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment