From 7797f12210a128c6177271715e3824db3bf6ce13 Mon Sep 17 00:00:00 2001 From: Lemming <lemming@giessen.ccc.de> Date: Sat, 1 Nov 2014 16:28:45 +0100 Subject: [PATCH] 1. Port Eclipse-Code zu Android --- AndroidStudio/TestApp/app/app.iml | 2 - AndroidStudio/TestApp/app/build.gradle | 1 - .../so/libcrypt/testapp/testapp/Empty.java | 118 ++++++++++++++---- .../src/main/res/layout/activity_empty.xml | 3 +- 4 files changed, 94 insertions(+), 30 deletions(-) diff --git a/AndroidStudio/TestApp/app/app.iml b/AndroidStudio/TestApp/app/app.iml index 0ddbb53..49ffdd7 100644 --- a/AndroidStudio/TestApp/app/app.iml +++ b/AndroidStudio/TestApp/app/app.iml @@ -81,8 +81,6 @@ <orderEntry type="jdk" jdkName="Android API 20 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" exported="" name="commons-math3-3.3" level="project" /> - <orderEntry type="library" exported="" name="flanagan" level="project" /> - <orderEntry type="library" exported="" name="commons-math3-3.3-javadoc" level="project" /> </component> </module> diff --git a/AndroidStudio/TestApp/app/build.gradle b/AndroidStudio/TestApp/app/build.gradle index 9cdeebe..98c514e 100644 --- a/AndroidStudio/TestApp/app/build.gradle +++ b/AndroidStudio/TestApp/app/build.gradle @@ -22,5 +22,4 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile project(':commons-math3-3.3') - compile project(':commons-math3-3.3-javadoc') } diff --git a/AndroidStudio/TestApp/app/src/main/java/so/libcrypt/testapp/testapp/Empty.java b/AndroidStudio/TestApp/app/src/main/java/so/libcrypt/testapp/testapp/Empty.java index faf6011..61c7fe7 100644 --- a/AndroidStudio/TestApp/app/src/main/java/so/libcrypt/testapp/testapp/Empty.java +++ b/AndroidStudio/TestApp/app/src/main/java/so/libcrypt/testapp/testapp/Empty.java @@ -8,6 +8,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import android.text.format.Formatter; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -19,9 +20,9 @@ import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optimization.PointValuePair; import org.apache.commons.math3.optimization.direct.NelderMeadSimplex; import org.apache.commons.math3.optimization.direct.SimplexOptimizer; -import org.apache.commons.math3.util.FastMath; import org.apache.commons.math3.optimization.*; +import java.text.Format; import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; @@ -36,9 +37,9 @@ public class Empty extends Activity { private Hashtable<String, Advertiser> ADVERTISERS = new Hashtable<String, Advertiser>(); - private ArrayList<Double> s; - private ArrayList<Float> beacon_variance; - private ArrayList<float[]> beacon_positions; + private ArrayList<Float> s = new ArrayList<Float>(); //Distance + private ArrayList<Float> beacon_variance = new ArrayList<Float>(); //Distance-Error + private ArrayList<float[]> beacon_positions = new ArrayList<float[]>(); //Position private float[] sx; @Override @@ -97,36 +98,96 @@ public class Empty extends Activity { } }); - // setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24")); } /** * Class get called from nelder-mead */ private static class myfunc extends Empty implements MultivariateFunction { - - /** * This should be error-function as of python-code * @param x * @return */ public double value(double[] x) { - // x - beacon_positions - ArrayList<float[]> advers = super.getBeacon_positions(); - List<float[]> keys = new ArrayList(advers); - ArrayList<float[]> tmp = new ArrayList<float[]>(); + ArrayList<float[]> advers = getBeacon_positions(); + ArrayList<Float> dist = getS(); + ArrayList<Float> dist_er = getBeacon_variance(); + ArrayList<Double> scaling = new ArrayList<Double>(); + + + List<float[]> keys = new ArrayList<float[]>(advers); + ArrayList<Float> tmp = new ArrayList<Float>(); + + String dbg = ""; + // Print out given x,y,z +/* for (int i = 0; i < x.length; i++) { + dbg += "x["+Integer.toString(i)+"]:" + Double.toString(x[i]) +" "; + } + System.out.println(dbg); + dbg = null;*/ - // Python: (x-beacon_positions)**2 for (float[] element: keys) { + // Python: (x-beacon_positions)**2 double new_x = Math.pow(x[0] - element[0], 2); double new_y = Math.pow(x[1] - element[1], 2); double new_z = Math.pow(x[2] - element[2], 2); - tmp.add(new float[]{(float) new_x, (float) new_y, (float) new_z}); + // Python: (((x-beacon_positions)**2).sum(axis=1)) + double sum = new_x + new_y + new_z; + // Python: ((x-beacon_positions)**2).sum(axis=1))**0.5 + tmp.add( (float) Math.pow(sum, 0.5) ); } + //tmp is now r + + //dbg r +/* for (Float e: tmp) { + System.out.println("r: " + Float.toString(e)); + }*/ + + + for(int i = 0; i < tmp.size(); i++) { + // Python: (s-r)**2 + double er = Math.pow( dist.get(i) - tmp.get(i), 2 ); + //dbg + //System.out.println("error: " + Double.toString(er)); + + // Python: np.fmin(errors, 0*r+1**2) + er = Math.min(er, 1.); + //dbg + //System.out.println("errors:" + Double.toString(er)); + tmp.set(i, (float) er); + } + // tmp is now error + + + + + // Scalling +/* for (Double e: dist_er) { + // 1/0.0 will produce "Infinity" + double scaling_tmp = 1/e.doubleValue(); + if (scaling_tmp == Double.NEGATIVE_INFINITY || scaling_tmp == Double.POSITIVE_INFINITY) { + scaling_tmp = -0.000000001; + } + scaling.add( scaling_tmp ); + }*/ + + // Sum up with scaling +/* double ret = 0.; + for(int i = 0; i < tmp.size(); i++) { + ret = ret + (tmp.get(i) * scaling.get(i)); + }*/ + + double ret = 0; + for(Float e: tmp) { + ret = ret + e; + } + + //System.out.println("ret: "+ Double.toString(ret)); + return ret; } } @@ -157,9 +218,10 @@ public class Empty extends Activity { } public float[] vec_sub(float[] a, float[] b) { - float[] c = new float[0]; + float[] c = new float[3]; + //TODO Exception wenn nicht beide Arrays 3 Elemente - for (int i = 0; i <= a.length; i++) { + for (int i = 0; i <= a.length-1; i++) { c[i] = a[i] - b[i]; } @@ -194,27 +256,33 @@ public class Empty extends Activity { // gerneriere daten zur simulation simulationsdaten(); - s = null; //Distance - beacon_variance = null; //Distance-Error; - beacon_positions = null; - List<String> keys = new ArrayList(ADVERTISERS.keySet()); for (String e : keys) { Advertiser cur = ADVERTISERS.get(e); - s.add( (double) cur.get_distance() ); + s.add(cur.get_distance()); beacon_variance.add( cur.get_distance_error() ); beacon_positions.add( cur.getPos() ); } - sx = vec_sub(advertiser_min_distance().getPos(), new float[]{0.0f, 0.0f, 0.0f}); + sx = vec_sub(advertiser_min_distance().getPos(), new float[]{0.2f, 0.0f, 0.0f}); SimplexOptimizer optimizer = new SimplexOptimizer(1e-10, 1e-30); - optimizer.setSimplex(new NelderMeadSimplex(new double[] { 0.2, 0.2 })); + optimizer.setSimplex(new NelderMeadSimplex(new double[] { 0.15, 0.15, 0.15})); PointValuePair optimum - = optimizer.optimize(100, new myfunc(), GoalType.MINIMIZE, new double[] { -3, 0 }); - double p = optimum.getPoint()[0]; + = optimizer.optimize(5000, new myfunc(), GoalType.MINIMIZE, new double[] { 3., 3., 0.3}); + double x = optimum.getPoint()[0]; + double y = optimum.getPoint()[1]; + double z = optimum.getPoint()[2]; + + + + Context context = getApplicationContext(); + int duration = Toast.LENGTH_SHORT; + Toast.makeText(context, String.format("Magic says x:%f y:%f z:%f", x, y, z), duration).show(); + + Log.d(LOGTAG, String.format("Magic says x:%f y:%f z:%f", x, y, z)); } public void simulationsdaten() { @@ -231,7 +299,7 @@ public class Empty extends Activity { } - public ArrayList<Double> getS() { + public ArrayList<Float> getS() { return s; } diff --git a/AndroidStudio/TestApp/app/src/main/res/layout/activity_empty.xml b/AndroidStudio/TestApp/app/src/main/res/layout/activity_empty.xml index 7fbdddd..3b41ab6 100644 --- a/AndroidStudio/TestApp/app/src/main/res/layout/activity_empty.xml +++ b/AndroidStudio/TestApp/app/src/main/res/layout/activity_empty.xml @@ -6,8 +6,7 @@ android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" - tools:context=".Empty" - android:id="@+id/"> + tools:context=".Empty"> <TextView android:text="@string/hello_world" -- GitLab