2016年2月27日土曜日

Android : 端末固有のIDを取得

端末から上がってくる情報を自動で仕分けするのに端末情報が必要でしたので、試してみました。候補としては
デバイスID(IMEI/MEID/ESN): SIMないとダメ
シリアル番号:端末固有の製造番号。取得できる
Android_ID:初期化時に与えられる番号
ということでシリアル番号かAndroid_IDでやってみます。
 シリアル番号とAndroid_idは取得できたので、当面これをキーにして端末情報を整理していきます。

 ソースコード

参考
http://iridge.jp/blog/201404/4836/
https://thinkit.co.jp/story/2012/03/09/3467?page=0%2C2
http://d.hatena.ne.jp/takigawa401/20110512/1305209808

2016年2月17日水曜日

rJava : プログラミング(12) T-Test

対象者の評価の前後の期間をグループとし、http://mizunolab.sist.ac.jp/2016/01/rjava-10-f-test.htmlで等分散性が得られたとし、2つのグループの違いをt.testで確かめる。

$ vi JRITest15.java
$ javac JRITest15.java
$ java -Djava.library.path=/usr/lib64/R/library/rJava/jri/ JRITest15

[VECTOR ([REAL* (-3.842989125314249)], [REAL* (42.0)], [REAL* (4.0495738809968483E-4)], [REAL* (-6.5858030454480865, -2.0505605909155538)], [REAL* (40.22727272727273, 44.54545454545455)], [REAL* (0.0)], [STRING "two.sided"], [STRING " Two Sample t-test"], [STRING "c_group1 and c_group2"])]

この場合, p-value = 4.0495738809968483E-4 となり帰無仮説が棄却。2つの期間グループに差があることがわかる。

今回利用するSQL文
SELECT * FROM operations WHERE category = 0 and operator =6


public class JRITest15 {

        public static void main(String[] args)
        {
                MySQL mysql = new MySQL();
                Rengine re = new Rengine( new String[]{"--no-save"}, false, null );
                ResultSet rs = mysql.selectOperations();

                int N = 44;
                double group1 [] = new double[N/2];
                double group2 [] = new double[N/2];//**注意i:奇数の時は+1**

                int index = 0;
                try {
                        while(rs.next()){
                                if(index < (int)(N/2)){
                                        group1[index] = rs.getDouble("value");
                                }else if(index >= (int)(N/2)){
                                        group2[index-(int)(N/2)] = rs.getDouble("value");
                                }
                                index ++;
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                }

                System.out.println(Arrays.toString(group1));
                System.out.println(Arrays.toString(group2));

                StringBuffer buf1 = new StringBuffer();
                buf1.append("c_group1<-c(");
                for(int i = 0; i < group1.length; i++){
                        if(i == group1.length-1)
                                buf1.append(group1[i]+")");
                        else
                                buf1.append(group1[i]+",");
                }
                String c_group1 = buf1.toString();
                re.eval(c_group1);

                REXP x1 = re.eval("summary(c_group1)");
                System.out.println(x1);
                double [] ary1 = x1.asDoubleArray();
                for (int i = 0; i < ary1.length; i++) {
                        System.out.println(ary1[i]);
                }

                StringBuffer buf2 = new StringBuffer();
                buf2.append("c_group2<-c(");
                for(int i = 0; i < group2.length; i++){
                        if(i == group2.length-1)
                                buf2.append(group2[i]+")");
                        else
                                buf2.append(group2[i]+",");
                }
                String c_group2 = buf2.toString();
                re.eval(c_group2);

                REXP x2 = re.eval("summary(c_group2)");
                System.out.println(x2);
                double [] ary2 = x2.asDoubleArray();
                for (int i = 0; i < ary2.length; i++) {
                        System.out.println(ary2[i]);
                }

                REXP x3 = re.eval("t.test(c_group1, c_group2, var.equal=T)");
                System.out.println(x3);
                re.end();
        }
}


p

2016年2月16日火曜日

Linux : SSHのパスワード設定許可

通常は証明書認証しているのですが、作業上パスワード認証の時が便利なので、その時のメモです。

# vi /etc/ssh/sshd_config




# service sshd restart

これでホスト側から
$ ssh -l ユーザ名 ホスト名
でログイン出来ます。

Java : コンパイル時の日本語でのエラー対策

Linux上でjavaでコンパイルする時に、日本語コメントがエラーになってしまう場合があるのでその対処法。

コンパイル時
$ javac -encoding utf-8 ahp/*.java
のように
-encoding utf-8
としていすればいいみたい。

Android : 画像の表示

Androidでファイル名を指定して画像の表示です。質問があったので書き残しておきます。

まず今までActionBarActivityを使っていたのですが、非推奨になったようなのでAppCompatを選択します。今まで左のBlank Activityを利用していましたが、Empty Activityを利用します。
今回はEnvironmentを使ってアクセスします。
参考
http://developer.android.com/intl/ja/reference/android/os/Environment.html
[利用例]
filepath= Environment.getExternalStorageDirectory().toString() +"/"+ Environment.DIRECTORY_PICTURES+"/" ;

あとはファイル名を指定すれば、画像を表示できます。
ファイルの場所は、/storage/sdcard/Pictures/ファイル名 となるようです。

Emulatorでやる場合、DDMSでファイルを入れておく必要があります。

アプリ側でファイル名を入力すると、画像が表示されます。
となります。
ソースコード

ディレクトリ検索してやりたい場合は、下記が有効。
http://seesaawiki.jp/w/moonlight_aska/d/%A5%AE%A5%E3%A5%E9%A5%EA%A1%BC%A4%AB%A4%E9%B2%E8%C1%FC%A4%F2%BC%E8%C6%C0%A4%B9%A4%EB

2016年2月9日火曜日

LocalSolver(4) : 計算結果の再取得から最適化、データ格納

LocalSolver(3) : データベースの連携と結果格納で得られたデータを再度取り出し、最適化を実施します。

 [knapsack03.java]

********** Knapsack03.java **********/
import java.sql.*;
import java.util.*;
import java.io.*;
import localsolver.*;

public class Knapsack03 {
    /* Number of items. */
    int nbItems;
    int facility_id[];

    /* Items properties. */
    double[] weights;
    double[] values;

    //public int[] getValues(){ return this.values;}
    //public int[] getWeights(){ return this.weights;}

    /* Knapsack bound */
    int knapsackBound;

    /* Solver. */
    LocalSolver localsolver;

    /* LS Program variables. */
    LSExpression[] x;

    /* Solutions (classes at each position). */
    List solutions;

    public Knapsack03(int n, int knapsackBound, int facility_id[], double r[], double throughput[]){
        nbItems = n;
        weights = r;
        values = throughput;
        this.knapsackBound = knapsackBound;
        this.facility_id = facility_id;
    }

    void solve(int limit) {
        try {
            /* Declares the optimization model. */
            localsolver = new LocalSolver();
            LSModel model = localsolver.getModel();
            x = new LSExpression[nbItems];

            System.out.println("nbItems="+nbItems);
            System.out.println("knapsackBound="+knapsackBound);

            // boolean variables x[i]
            for (int i = 0; i < nbItems; i++) {
                x[i] = model.boolVar();
                x[i].setName("x[" + i + "]");
            }

            // weight constraint
            LSExpression weightSum = model.sum();
            for (int i = 0; i < nbItems; i++) {
                LSExpression itemWeight = model.prod(x[i],weights[i]);
                weightSum.addOperand(itemWeight);
            }
            model.constraint(model.leq(weightSum,knapsackBound));

            // maximize value
            LSExpression valueSum = model.sum();
            for (int i = 0; i < nbItems; i++) {
                LSExpression itemValue = model.prod(x[i],values[i]);
                valueSum.addOperand(itemValue);
            }

            model.maximize(valueSum);
            model.close();

            /* Parameterizes the solver. */
            LSPhase phase = localsolver.createPhase();
            phase.setTimeLimit(limit);

            localsolver.solve();

            solutions = new ArrayList();
            for (int i = 0; i < nbItems; i++)
                if (x[i].getValue() == 1)
            solutions.add(i);

        } catch (LSException e) {
            System.out.println("LSException:" + e.getMessage());
            System.exit(1);
        }
    }

    /* Writes the solution in a file */
    void writeSolution(String fileName, MySQL mysql) {
        try {
            BufferedWriter output = new BufferedWriter(new FileWriter(fileName));

            int idx[] = new int[solutions.size()];
            double obj = 0;
            for (int i = 0; i < solutions.size(); ++i){
                output.write(solutions.get(i) + " ");
                idx[i] = facility_id[solutions.get(i)]-1;
                obj += values[solutions.get(i)];
            }
            mysql.insertKnapsack(solutions.size(),obj);
            mysql.insertElement(idx);
            output.write("\n");

            output.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

     public static void main(String[] args) {

        int combination_id = 15, n = 0;;
        String outputFile = "result.txt";
        MySQL mysql = new MySQL(combination_id);

        ResultSet rs = mysql.selectCombinations();
        try {
                while(rs.next()){
                        n = rs.getInt("n");
                }
        }catch (SQLException e) {
                        e.printStackTrace();
        }

        int facility_id[] = new int[n];
        double l[] = new double[n];
        double r[] = new double[n];
        double throughput[] = new double[n];
        int index = 0;
        rs = mysql.selectPoints();
        try {
                while(rs.next()){
                        facility_id[index] = rs.getInt("facility_id");
                        l[index] = rs.getDouble("l");
                        r[index] = rs.getDouble("r");
                        throughput[index] = rs.getDouble("throughput");
                        index++;
                }
        }catch (SQLException e) {
                        e.printStackTrace();
        }

        Knapsack03 model = new Knapsack03(n, 2000, facility_id, r, throughput);
        String strTimeLimit = "10";
        model.solve(Integer.parseInt(strTimeLimit));
        if(outputFile != null) {
            model.writeSolution(outputFile, mysql);
        }
    }
}

class MySQL {

        String driver;
        String server, dbname, url, user, password;
        Connection con;
        Statement stmt;
        ResultSet rs;
        int combination_id,n;
        int id = -1;

        public MySQL(int combination_id) {
                this.combination_id = combination_id;
                this.driver = "org.gjt.mm.mysql.Driver";
                this.server = "xxxx.yyyy.com";
                this.dbname = "xxxx";
                this.url = "jdbc:mysql://" + server + "/" + dbname + "?useUnicode=true&characterEncoding=UTF-8";
                this.user = "xxxx";
                this.password = "zzzzzzzzzzzzzzzz";
                try {
                        this.con = DriverManager.getConnection(url, user, password);
                        this.stmt = con.createStatement ();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                try {
                        Class.forName (driver);
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        public void close(){
                try {
                        rs.close();
                        stmt.close();
                        con.close();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

        public ResultSet selectPoints(){

                String sql = "SELECT * FROM points where combination_id ="+this.combination_id;
                ResultSet rs = null;
                try {
                        rs = stmt.executeQuery (sql);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return rs;
        }

        public ResultSet selectCombinations(){

                String sql = "SELECT * FROM combinations where id ="+this.combination_id;
                ResultSet rs = null;
                try {
                        rs = stmt.executeQuery (sql);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return rs;
        }

        public void insertKnapsack(int n,double obj){
                String sql = "INSERT INTO knapsacks(n,obj) VALUES ("+n+","+obj+")";
                try {
                        stmt.execute (sql);
                        ResultSet rs1 = stmt.executeQuery("SELECT LAST_INSERT_ID() AS LAST");
                        if (rs1 != null && rs1.next()){
                                id = rs1.getInt("LAST");
                        }
                        System.out.println("Knapsack_ID="+id);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }  //try catchで囲む
        }

        public void insertElement(int idx[]){
                int idex = 0;
                StringBuffer buf = new StringBuffer();
                buf.append("INSERT INTO elements(facility_id, knapsack_id) VALUES");
                for(int i = 0; i < idx.length; i++){//対象のDMUの係数を使い、全部のDMUのDEAを計算
                                idex = idx[i] +1;
                        if(i == idx.length -1)
                                buf.append("("+idex+","+this.id+")");
                        else
                                buf.append("("+idex+","+this.id+"),");

                }
                String sql4 = buf.toString();
                try {
                        stmt.execute (sql4);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

}


Java : SELECT LAST_INSERT_ID() の利用

JavaでMySQLにInsertした後、そのAuto_IncrementされたIDを取得します。
例としてknapsacksテーブルに何かをInsertした後、そのIDを取得します。
数行で取れるので楽。

[insertKnapsack関数]


        public void insertKnapsack(int n,double obj){
                String sql = "INSERT INTO knapsacks(n,obj) VALUES ("+n+","+obj+")";
                try {
                        stmt.execute (sql);
                        ResultSet rs1 = stmt.executeQuery("SELECT LAST_INSERT_ID() AS LAST");
                        if (rs1 != null && rs1.next()){
                                id = rs1.getInt("LAST");
                        }
                        System.out.println("Knapsack_ID="+id);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }  //try catchで囲む
        }


参考
http://d.hatena.ne.jp/tacohachi/20100127/p1

2016年2月3日水曜日

LocalSolver(3) : データベースの連携と結果格納

Knapsack問題を利用し、最適拠点配置を行う。全部で42拠点あるのでまず初期拠点をKnapsackで選び出し、閉鎖型待ち行列ネットワークで計算する。

1.パラメタ設定:人気度、拠点利用コスト、コスト制限
2.Knapsackで拠点算出->DBに登録
登録用テーブル
knapsacks
 elements


3.最適化計算->結果をテーブルに格納
価値:人気
重さ:拠点使用コスト

$ sudo vi Knapsack02.java
$ sudo javac Knapsack02.java -cp /opt/localsolver_5_5/bin/localsolver.jar
$ sudo java -cp /Users/mizuno/Desktop/work/mysql-connector-java-5.1.21-bin.jar:/opt/localsolver_5_5/bin/localsolver.jar:. -Djava.library.path=/opt/localsolver_5_5/bin/ Knapsack02


 


[Knapsack02.java]


********** Knapsack02.java **********/
import java.sql.*;
import java.util.*;
import java.io.*;
import localsolver.*;

public class Knapsack02 {
    /* Number of items. */
    int nbItems;

    /* Items properties. */
    int[] weights;
    int[] values;

    public int[] getValues(){ return this.values;}
    public int[] getWeights(){ return this.weights;}

    /* Knapsack bound */
    int knapsackBound;

    /* Solver. */
    LocalSolver localsolver;

    /* LS Program variables. */
    LSExpression[] x;

    /* Solutions (classes at each position). */
    List solutions;

    public Knapsack02(int nbItems, int knapsackBound, MySQL mysql){
        ResultSet rs = mysql.selectFacilities();
        this.nbItems = nbItems;
        weights = new int[nbItems];
        values = new int[nbItems];
        this.knapsackBound = knapsackBound;
        int index = 0;
        try {
                while(rs.next()){
                        values[index] = rs.getInt("popularity");
                        weights[index] = rs.getInt("cost");
                        index++;
                }
        }catch (SQLException e) {
                        e.printStackTrace();
        }


    }


    /* Reads instance data. */
    void readInstance(String fileName) {
        try {
            Scanner input = new Scanner(new File(fileName));

            nbItems = input.nextInt();

            weights = new int[nbItems];
            for (int i = 0; i < nbItems; i++) {
                weights[i] = input.nextInt();
            }

            values = new int[nbItems];
            for (int i = 0; i < nbItems; i++) {
                values[i] = input.nextInt();
            }

            knapsackBound = input.nextInt();

            input.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    void solve(int limit) {
        try {
            /* Declares the optimization model. */
            localsolver = new LocalSolver();
            LSModel model = localsolver.getModel();
            x = new LSExpression[nbItems];

            System.out.println("nbItems="+nbItems);
            System.out.println("knapsackBound="+knapsackBound);

            // boolean variables x[i]
            for (int i = 0; i < nbItems; i++) {
                x[i] = model.boolVar();
                x[i].setName("x[" + i + "]");
            }

            // weight constraint
            LSExpression weightSum = model.sum();
            for (int i = 0; i < nbItems; i++) {
                LSExpression itemWeight = model.prod(x[i],weights[i]);
                weightSum.addOperand(itemWeight);
            }
            model.constraint(model.leq(weightSum,knapsackBound));

            // maximize value
            LSExpression valueSum = model.sum();
            for (int i = 0; i < nbItems; i++) {
                LSExpression itemValue = model.prod(x[i],values[i]);
                valueSum.addOperand(itemValue);
            }

            model.maximize(valueSum);
            model.close();

            /* Parameterizes the solver. */
            LSPhase phase = localsolver.createPhase();
            phase.setTimeLimit(limit);

            localsolver.solve();

            solutions = new ArrayList();
            for (int i = 0; i < nbItems; i++)
                if (x[i].getValue() == 1)
            solutions.add(i);

        } catch (LSException e) {
            System.out.println("LSException:" + e.getMessage());
            System.exit(1);
        }
    }

    /* Writes the solution in a file */
    void writeSolution(String fileName, MySQL mysql) {
        try {
            BufferedWriter output = new BufferedWriter(new FileWriter(fileName));

            int idx[] = new int[solutions.size()];
            double obj = 0;
            for (int i = 0; i < solutions.size(); ++i){
                output.write(solutions.get(i) + " ");
                idx[i] = solutions.get(i);
                obj += values[solutions.get(i)];
            }
            mysql.insertKnapsack(solutions.size(),obj);
            mysql.insertElement(idx);
            output.write("\n");

            output.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

     public static void main(String[] args) {

        int id = 1001;
        String outputFile = "result.txt";
        MySQL mysql = new MySQL(id);
        Knapsack02 model = new Knapsack02(42, 2000, mysql);
        //model.readInstance(instanceFile);
        String strTimeLimit = "10";
        int values[] = model.getValues();
        int weights[] = model.getWeights();
        for(int i = 0; i < 42; i++) System.out.print(weights[i]+" ");
        System.out.println("");
        for(int i = 0; i < 42; i++) System.out.print(values[i]+" ");
        System.out.println("");

        model.solve(Integer.parseInt(strTimeLimit));
        if(outputFile != null) {
            model.writeSolution(outputFile, mysql);
        }
    }
}