Skip to content

kgp実験メモ

shinsuke-mat edited this page Dec 14, 2018 · 1 revision

kgp 実験メモ

2018/11/27

kali-30m done

genp-30m fail

班管理ミスった.やり直し. とはいえ,適切にタイムアウト=30mとしても時間で打ち切られない. 正常にタイムアウト処理が行われたケースを見たことがない. 終了は,異常タイムアウトかMAX_GENERATIONSTOP_BY_PATCH_FOUNDのいずれか

-maxtimeがまともに動いていない?

astorのregression test

回帰テストしてるらしい.

-tmax2 (Optional) maximum time (in miliseconds) for validating the regression test cases

KGPが早い理由は回帰テストサボりの可能性がある. 修正できたように見えて,回帰テストすると死ぬとか.

astor分析

loglevel=DEBUGに変更して真面目にログを読んでみる.

### 起動
java -jar /opt/apr-data/bin/astor.jar -mode jgenprog -location /opt/apr-data/example/math002 -scope package -failing org.apache.commons.math3.distribution.HypergeometricDistributionTest -srcjavafolder sr
2018-11-27 00:50:52,752 INFO main - command line arguments: [-mode  jgenprog  -location  /opt/apr-data/example/math002  -scope  package  -failing  org.apache.commons.math3.distribution.HypergeometricDist
2


### GZolterによる分析.ここで3分くらい.Suspiciousnessの計算っぽい
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:149) - Gzoltar fault localization: min susp value parameter: 0.1
[DEBUG] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:158) - Gzoltar run over: /opt/apr-data/example/math002/./output_astor/AstorMain-math002/bin/default , does it exist? true
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:169) - -gz-Adding classpath: [/opt/apr-data/example/math002/./output_astor/AstorMain-math002//bin//default, /opt/apr-data/astor/examples/libs/junit-4.4.jar]
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:206) - Test failt: org.apache.commons.math3.util.FastMathTest#checkMissingFastMathClasses
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:206) - Test failt: org.apache.commons.math3.random.CorrelatedRandomVectorGeneratorTest#testSampleWithZeroCovariance
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:206) - Test failt: org.apache.commons.math3.distribution.HypergeometricDistributionTest#testMath1021
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:218) - Gzoltar Test Result Total:5195, fails: 3, GZoltar suspicious 37312, with positive susp 341
[INFO ] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:226) - nr test results 5195
[DEBUG] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:259) - Suspicious: line org.apache.commons.math3.random.CorrelatedRandomVectorGenerator l: 168, susp 0.289
[DEBUG] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:259) - Suspicious: line org.apache.commons.math3.random.CorrelatedRandomVectorGenerator l: 169, susp 0.289
[DEBUG] fr.inria.astor.core.faultlocalization.gzoltar.GZoltarFaultLocalization.searchSuspicious(GZoltarFaultLocalization.java:259) - Suspicious: line org.apache.commons.math3.random.CorrelatedRandomVectorGenerator l: 173, susp 0.289


### 上記suspに基づく,変更箇所の生成?
[INFO ] fr.inria.astor.core.solutionsearch.AstorCoreEngine.initPopulation(AstorCoreEngine.java:693) -
---- Initial suspicious size: 55
[DEBUG] fr.inria.astor.core.solutionsearch.population.ProgramVariantFactory.createProgramInstance(ProgramVariantFactory.java:116) - Creating variant 1
[DEBUG] fr.inria.astor.core.solutionsearch.population.ProgramVariantFactory.createModificationPoints(ProgramVariantFactory.java:256) - --ModifPoint:CtForImpl, suspValue 0.2886751345948129, line 168, file CorrelatedRandomVectorGenerator.java
[DEBUG] fr.inria.astor.core.solutionsearch.population.ProgramVariantFactory.createModificationPoints(ProgramVariantFactory.java:256) - --ModifPoint:CtAssignmentImpl, suspValue 0.2886751345948129, line 169, file CorrelatedRandomVectorGenerator.java
[DEBUG] fr.inria.astor.core.solutionsearch.population.ProgramVariantFactory.createModificationPoints(ProgramVariantFactory.java:256) - --ModifPoint:CtLocalVariableImpl, suspValue 0.2886751345948129, line 173, file CorrelatedRandomVectorGenerator.java


### ここがエグい.5mくらいかかる.全テスト実行しているっぽい.それ必要?
[INFO ] fr.inria.astor.core.solutionsearch.population.ProgramVariantFactory.createInitialPopulation(ProgramVariantFactory.java:82) - Creating program variant #1, [Variant id: 1, #gens: 50, #ops: 0, parent:-]
[DEBUG] fr.inria.astor.core.solutionsearch.AstorCoreEngine.initPopulation(AstorCoreEngine.java:707) - Calculating fitness
[DEBUG] fr.inria.astor.core.solutionsearch.AstorCoreEngine.setFitnessOfPopulation(AstorCoreEngine.java:716) - Calculating fitness for original program variant.
[DEBUG] fr.inria.astor.core.validation.processbased.ProcessValidator.validate(ProcessValidator.java:65) - -Running first validation
[DEBUG] fr.inria.astor.core.validation.processbased.LaucherJUnitProcess.printCommandToExecute(LaucherJUnitProcess.java:228) - Executing process:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java  -Xmx2048m  -cp  /opt/apr-data/astor/examples/libs/junit-4.4.jar:/opt/apr-data/example/math002/./output_astor/AstorMain-math002/bin/default/:/opt/apr-data/bin/astor.jar:  fr.inria.astor.core.validation.junit.JUnitNologExternalExecutor  org.apache.commons.math3.distribution.HypergeometricDistributionTest
[DEBUG] fr.inria.astor.core.validation.processbased.LaucherJUnitProcess.getTestResult(LaucherJUnitProcess.java:253) - Analyzing output from process
[DEBUG] fr.inria.astor.core.validation.processbased.ProcessValidator.validate(ProcessValidator.java:80) - TR: Success: false, failTest= 1, was successful: false, cases executed: 16] ,[]
[DEBUG] fr.inria.astor.core.validation.processbased.ProcessValidator.executeRegressionTesting(ProcessValidator.java:183) - -Test Failing is passing, Executing regression
[DEBUG] fr.inria.astor.core.validation.processbased.LaucherJUnitProcess.printCommandToExecute(LaucherJUnitProcess.java:228) - Executing process:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java  -Xmx2048m  -cp  /opt/apr-data/astor/examples/libs/junit-4.4.jar:/opt/apr-data/example/math002/./output_astor/AstorMain-math002/bin/default/:/opt/apr-data/bin/astor.jar:  fr.inria.astor.core.validation.junit.JUnitNologExternalExecutor  org.apache.commons.math3.RetryRunnerTest  o
...
[DEBUG] fr.inria.astor.core.validation.processbased.ProcessValidator.executeRegressionTesting(ProcessValidator.java:201) - TR: Success: false, failTest= 58, was successful: false, cases executed: 4413] ,
[DEBUG] fr.inria.astor.core.solutionsearch.AstorCoreEngine.setFitnessOfPopulation(AstorCoreEngine.java:741) - The original fitness is : 58.0


### いつものパラメタダンプ
[INFO ] fr.inria.astor.core.setup.ConfigurationProperties.print(ConfigurationProperties.java:66) - ----------------------------
[INFO ] fr.inria.astor.core.setup.ConfigurationProperties.print(ConfigurationProperties.java:67) - ---Configuration properties:---Execution values
[INFO ] fr.inria.astor.core.setup.ConfigurationProperties.print(ConfigurationProperties.java:69) - p:lastJUnitVersion= ./examples/libs/junit-4.11.jar
[INFO ] fr.inria.astor.core.setup.ConfigurationProperties.print(ConfigurationProperties.java:69) - p:alternativecompliancelevel= 4
[INFO ] fr.inria.astor.core.setup.ConfigurationProperties.print(ConfigurationProperties.java:69) - p:ignoredTestCases=


### こっからGA処理開始.毎秒1世代(1個体)くらい進んでいるように見える
[INFO ] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.startEvolution(EvolutionarySearchEngine.java:40) -
----Starting Solution Search
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.startEvolution(EvolutionarySearchEngine.java:65) -
----------Running generation: 1, population size: 1
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.processGenerations(EvolutionarySearchEngine.java:134) -
***** Generation 1 : 0
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.processGenerations(EvolutionarySearchEngine.java:143) - **Parent Variant: [Variant id: 1, #gens: 50, #ops: 0, parent:-]
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.createNewProgramVariant(EvolutionarySearchEngine.java:193) -
--Child created id: 2
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.modifyProgramVariant(EvolutionarySearchEngine.java:242) - --Creating new operations for variant [Variant id: 2, #gens: 50, #ops: 0, par
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.modifyProgramVariant(EvolutionarySearchEngine.java:256) - ---analyzing modificationPoint position: 30
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.modifyProgramVariant(EvolutionarySearchEngine.java:275) - location: StorelessBivariateCovariance.java90
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.modifyProgramVariant(EvolutionarySearchEngine.java:277) - operation: OP_INSTANCE:
RemoveOp:(spoon.support.reflect.code.CtOperatorAssignmentImpl) `covarianceNumerator += ((((n) - 1.0) / (n)) * deltaX) * deltaY ` -topatch--> `-` (null)
[DEBUG] fr.inria.astor.core.solutionsearch.EvolutionarySearchEngine.modifyProgramVariant(EvolutionarySearchEngine.java:297) -
--Summary Creation: for variant [Variant id: 2, #gens: 49, #ops: 1, parent:1] gen mutated: 1 , gen not mut: 0, gen not applied  0

astor-genprog不調の理由3

有馬君に頼んで調べてもらった. 完全に解決.

astorのタイムアウト時間の計測方法に起因する計測スクリプトのバグ.

 0m       10m                     30m   35m     40m
t|---------|-----------------------|-----|------|
 |起動     |初期処理                |期待していたタイムアウトのライン
                                         |タイムアウトコマンドによる打ち切り
           |------------------------------------|実際のタイムアウト
                        30m

astorは初期処理(コンパイル・フルテスト)後にタイムアウト時間の計測が開始される. タイムアウトコマンドは5mの猶予を持っているが,上記初期処理は10mくらいかかるので, タイムアウトコマンドによる強制終了が発生する.

猶予を+30m(60m)として再実験. 20台による並列処理.11/29朝には終わる予定.

ポスター作成開始

...

2018/11/26

astor-genporgの不調の理由2

わかった. -maxtime=1800 これがまずい.正しくは単位は分. 加え,上記のタイムアウトでastor自体が適切にタイムアウトできないと,結果が出力されない.

  1. タイムアウトが長すぎる
  2. timeoutコマンドで不適切なタイムアウト発生
  3. 結果が出力されない

よって, -maxtime=30とするのに加え, -maxgen=100000 にするべき.

2018/11/25

genp-10m done

話にならん. ほとんど修正できず.

修正1割(60, 70, 71, 73, 80, 81, 82, 85, 95) 最大世代数到達=正常終了6割 エラー落ち3割

genp-30mも追加で試す

kgp-30m doing

math30くらいまで終了. 劇的に改善とはいえず. 思うこと2点.

  1. やはり乱数が再現していない? math9-9は10mで成功,30mで失敗 時間以外のパラメタ同じなので,30mで失敗する理由がないはず.

  2. 後ろの世代が役に立っていない? まずheap落ちがかなり増えた. heap発生すると即死なので時間を増やしても効果がない. 長時間起動で安定しないとも言いかえられる.

2018/11/24

10台の実験結果

kgpが揃った. 概ね問題なさそう. 33/104 で(少なくとも1乱数で)修正成功. トータル17時間くらい.

genpは実行中. 絶不調.やはりパラメタ指定がおかしい?

astor-genporgの不調の理由

-maxgen=100000が悪いっぽい 世代数を上げると初回の計算が死ぬほど重くなって, 結果10mのタイムアウトに引っかかってる.

原稿で指摘できる問題. 「スケールしない」 実装の問題だとは思うけど.

genp

パラメタを極力デフォルトに戻した.

maxgen=200
flthreshold=0.1

19プロジェクト x 10シードで成功なし. 概ね14プロジェクトが強制タイムアウト(exit1). 5プロジェクトがOUTPUT_STATUS=MAX_GENERATION

後者は一応正常終了なので良い.前者がまずい.

このパラメタだと600sはきついのかも. maxgen=100くらいか?

kgpの世代カウント

カウント方法が微妙にバグってる. 過小に出ているのでハンデに.

もう一度実行しよう.17時間あれば終わる.

pyパーサとexcelを作成

コピペで結果が得られるように

kali

30プロジェクト x 10シードで成功ナシ.

タイムアウトしているわけでもないが, OUTPUT_STATUS=EXHAUSTIVE_NAVIGATEDで終了.

修正を試みているようなログは出ているので,根本的に間違っているわけではないと思う.

java -jar /opt/apr-data/bin/astor.jar -mode jkali -location /opt/apr-data/example/math021 -scope package -failing org.apache.commons.math3.linear.RectangularCholeskyDecompositionTest -srcjavafolder src/m

...
[INFO ] fr.inria.astor.core.solutionsearch.ExhaustiveSearchEngine.startEvolution(ExhaustiveSearchEngine.java:59) - mod_point MP=org.apache.commons.math3.linear.Array2DRowRealMatrix line: 509, pointed ele
[INFO ] fr.inria.astor.core.solutionsearch.ExhaustiveSearchEngine.startEvolution(ExhaustiveSearchEngine.java:60) - -->op: OP_INSTANCE:
RemoveOp:(spoon.support.reflect.code.CtForImpl) `for (int i = 0; i < nRows; i++) {      java.lang.System.arraycopy(data[i], 0, out[i], 0, data[i].length)[...] ` -topatch--> `-` (null)
[INFO ] fr.inria.astor.core.solutionsearch.ExhaustiveSearchEngine.startEvolution(ExhaustiveSearchEngine.java:59) - mod_point MP=org.apache.commons.math3.linear.Array2DRowRealMatrix line: 510, pointed ele
[INFO ] fr.inria.astor.core.solutionsearch.ExhaustiveSearchEngine.startEvolution(ExhaustiveSearchEngine.java:60) - -->op: OP_INSTANCE:
RemoveOp:(spoon.support.reflect.code.CtInvocationImpl) `java.lang.System.arraycopy(data[i], 0, out[i], 0, data[i].length) ` -topatch--> `-` (null)
[INFO ] fr.inria.astor.core.solutionsearch.AstorCoreEngine.atEnd(AstorCoreEngine.java:168) - Time Repair Loop (s): 30.196
[INFO ] fr.inria.astor.core.solutionsearch.AstorCoreEngine.atEnd(AstorCoreEngine.java:170) - generationsexecuted: 1
[INFO ] fr.inria.astor.core.solutionsearch.AstorCoreEngine.printFinalStatus(AstorCoreEngine.java:234) -
----SUMMARY_EXECUTION---
[INFO ] fr.inria.astor.core.solutionsearch.AstorCoreEngine.atEnd(AstorCoreEngine.java:184) -
 --SOLUTIONS DESCRIPTION--


Astor Output:

General stats:
EXECUTION_IDENTIFIER=
TOTAL_TIME=30.196
NR_GENERATIONS=null
NR_RIGHT_COMPILATIONS=61
NR_FAILLING_COMPILATIONS=3
NR_ERRONEOUS_VARIANCES=null
NR_FAILING_VALIDATION_PROCESS=null
OUTPUT_STATUS=EXHAUSTIVE_NAVIGATED

Patch stats:

[INFO ] fr.inria.astor.core.output.PatchJSONStandarOutput.produceOutput(PatchJSONStandarOutput.java:103) - Storing ing JSON at /opt/apr-data/example/math021/./output_astor/AstorMain-math021//astor_output
[INFO ] fr.inria.astor.core.output.PatchJSONStandarOutput.produceOutput(PatchJSONStandarOutput.java:104) - astor_output:
{"general":{"NR_RIGHT_COMPILATIONS":61,"NR_ERRONEOUS_VARIANCES":null,"EXECUTION_IDENTIFIER":"","OUTPUT_STATUS":"EXHAUSTIVE_NAVIGATED","NR_FAILLING_COMPILATIONS":3,"NR_GENERATIONS":null,"TOTAL_TIME":30.19
[INFO ] fr.inria.main.evolution.AstorMain.run(AstorMain.java:200) - Time Total(s): 480.223

real 495.243
user 614.733
sys  5.641

謎.

2018/11/23

10台の実験結果

math70辺りでsshがぽつぽつ切れていた. tmux必須か.

かなりの割合でkgpが勝てる. というよりkgpの方が修正できる割合が多い. 10mがシビアすぎるかも.

あとastorが変に停止するケースがたくさんある. 使い方間違ってる気もするが,. 成功するケースもあるのでよくわからん.

JUnitカスタムによるタイムアウトの効果

乱数1では新たに2バグ直るようになった 31 43

修正が早くなったものもある 81 20 58

逆に遅くなったもの 57 78 61 50

新たに修正可能になる=無限ループを回避するで納得できるが, 速度が変わる理由がよくわからん

あと(おそらく無限ループにより)停止状態になっていたもの 70 77 65 73 75 ...

こいつらは修正はできなかったもののうまく終了できていた JUnitカスタムの効果といえる

timeコマンドのフォーマットが処理めんどくさい

1m30sはクソ 90.00にしたい

export TIMEFORMAT=$'\nreal %3R\nuser %3U\nsys %3S'

モード名

asis kgp / astor

tobe kgp / genp / kali

heapあふれ

kgpで多発 題材側でheap例外めっちゃ出てる

実行マシンは4gb

試したところ,8gbあればいけそう ただawsの設定を変えるのに抵抗がある 「c5x.largeを使った」とだけ書きたい

awsインスタンス

c5dよりc5の方がよいか? c5dはssdを積んでるのでディスクアクセスが早い astor側に有利に働く

加え,メモリ増やしたほうがよいか. 4gbしかないので8gbくらいには kgpのheap問題多少解決するかも

あとdockerのcpu数も変に制御しないほうがよいかも astorの足を引っ張ってそう kgpもコンパイルはマルチプロセスなので, kgpにとってもハンデになってる

結果のパーサを作成

pythonで

2018/11/22

結果が少し揃った

どっこい

ログを眺めてみたところ,それぞれハンデを抱えている状態.

kgp:無限ループ引っかかるとどうしようもなくなる(例のスレッド停止不可問題に起因) astor:謎Los_Angelsエラー (編集済み)

astorのAmerica/Los_Angeles

タイムゾーンを指定すれば良いっぽい. sudo timedatectl set-timezone Asia/Tokyo

kgpでディスクあふれ

dockerのコンソールログが6GBになっていた --max-generation=10000000 で世代生成に失敗すると, 100万回ゴミ出力されてとんでもないサイズのテキストが生成される

世代=1万程度に変更

astorはマルチプロセスなのか?

dockerのcpuを指定して比較

指定なし(フルCPU)
real    1m53.329s
user    5m58.083s
sys     0m33.293s

CPU1個(--cpuset-cpus=0)
real    2m48.501s
user    2m36.803s
sys     0m11.005s

CPU数が多いほどたしかに早いけど,kgpもjavacはマルチプロセスだし, なんともいえないところ

シードとAPR手法の指定

VMごとに別シード別APR手法を適用している. これら2つのパラメタを環境変数に移行. これにより,初回のみ環境変数を手で設定すれば, あとは全て同じコマンドで別条件の実験を実施できる.

スレッド無限ループバグ続き

継承ベースのJUnitでは停止できない カスタムjarを作成することにより解決 テスト実行部分をスレッド化してタイムアウトを差し込んだ https://github.com/kusumotolab/kGenProg/issues/392

astor kgpそれぞれ10台で実験開始

...

2018/11/21

パラメタ調整

astorでpopulation=100にすると全く修正できなくなった. 基本デフォルト値使う方針で,世代無限,時間10mとすることに.

astorのflthresholdのデフォルト値がバグってる デフォルト0.1と書いてあるが実際は0. 0だと修正うまくいかないので

awsストレージたりない

[ec2-user@ip-172-31-10-226 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         1.8G     0  1.8G    0% /dev
tmpfs            1.9G     0  1.9G    0% /dev/shm
tmpfs            1.9G   41M  1.8G    3% /run
tmpfs            1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/nvme0n1p1   8.0G  8.0G   20K  100% /
tmpfs            371M     0  371M    0% /run/user/0
tmpfs            371M     0  371M    0% /run/user/1000

NVMeをマウントする必要があるらしい https://dev.classmethod.jp/cloud/aws/ec2-m5d-instance/

2018/11/20

astorの世代ごとのバリアント数は?

各世代1っぽい?

Astor Output:

General stats:
EXECUTION_IDENTIFIER=
TOTAL_TIME=33.182
NR_GENERATIONS=100
NR_RIGHT_COMPILATIONS=49
NR_FAILLING_COMPILATIONS=51
NR_ERRONEOUS_VARIANCES=null
NR_FAILING_VALIDATION_PROCESS=null
OUTPUT_STATUS=MAX_GENERATION

条件揃えるのが難しい

astorは各世代1 kgpは

masterを再マージせんとなぁ

ついでにたまってたPRも処理

exp-for-journalブランチがエグいことになってきたので, 再度masterから切り直し.

git co exp-for-journal
git diff master --binary > x.patch
git co master
patch x.patch

バイナリはパッチできないので手作業で

awsに移行

c5d.large

ssh ec2-user@54.250.186.120 -i apr.pem ssh ec2-user@13.230.253.238 -i apr.pem

awsは早いのか?

gpuより遅い

run kgp math 49

gpu
real    4m46.198s
user    7m54.706s
sys     0m32.092s

aws
real    6m57.095s
user    11m20.650s
sys     0m1.776s

実験パラメタ

apr       = {kgp, jgenprog, jkali}
scope     = {file, package, app}
project   = {math{1..104}, Lang{...}, Chart{...}, ...}
seed      = {1..10}

timelimit = 10m (600s)
maxgen    = 1000
populat.  = 10

10m x 10seed x 104bugs = 170h 170h x 3aprs = 510h

aws値段

10台c5d.large x 240時間/月 = $230

2018/11/17

kgp&math60で無限ループ?

停止していた 謎

util.shのマルチ引数のバグ

$ less /opt/apr-data/example/math001/defects4j.build.properties
#File automatically generated by Defects4J
d4j.bug.id=1
d4j.classes.modified=org.apache.commons.math3.fraction.Fraction,org.apache.commons.math3.fraction.BigFraction
d4j.dir.src.classes=src/main/java
d4j.dir.src.tests=src/test/java
d4j.project.id=Math
d4j.tests.trigger=org.apache.commons.math3.fraction.BigFractionTest::testDigitLimitConstructor,org.apache.commons.math3.fraction.FractionTest::testDigitLimitCons

d4j.tests.triggerが複数引数になっている. パースできていない.最初だけしか取り出せていない.

なぜkgpでmathコンパイルできている?

依存山程あるはず ???

強制タイムアウトしたほうがよいかも

何かと停止する astorも

→ timeoutコマンドを追加


2018/11/15

全員で打ち合わせ

https://github.com/kusumotolab/kGenProg/wiki/20181115-meeting

スレッド無限ループバグ

カスタムjarを作成することにより解決 https://github.com/kusumotolab/kGenProg/issues/392

memo C:\pbl\workspace\junit4\src\main\java\org\junit\internal\runners\statements\FailOnTimeout.java FailOnTimeout#evaluate

手元でのQSortの実行方法

$ gradle assemble; x=$(realpath build/libs/kGenProg.jar)
$ (cd example/QuickSort01; java -jar $(cygpath -w $x) -r . -s 'src/example/QuickSort.java' -t 'src/example/QuickSortTest.java' --test-time-limit=1)

2018/11/14

dockerのvolume化

永続データはdockerから切り離すと良い

  • クローンした{KGP,astor,d4j}リポジトリ
  • d4jからチェックアウトした題材
  • {KGP,astor,d4j}のコンパイル結果
  • ビルドツールのキャッシュ{.m2,.gradle}

teeで同じファイルに書き込むと空ファイルになる

クソがhttps://stackoverflow.com/questions/6696842/how-can-i-use-a-file-in-a-command-and-redirect-output-to-the-same-file-without-t

astor + qsort (無限ループ題材)

実行手順

$ cd /opt/apr-data/kgp/example/QuickSort01/
$ sudo javac -cp $astor_base/examples/libs/junit-4.4.jar -d bin src/example/QuickSort*.java
t=$base/kgp/example/QuickSort01; (cd $t; java -jar $base/bin/astor.jar -mode jgenprog -location $t -failing example.QuickSortTest -srcjavafolder src/ -srctestfolder src/ -binjavafolder bin/ -bintestfolder bin/  -dependencies $astor_base/examples/libs/junit-4.4.jar ; )

結果 ある程度考えてるっぽい

[INFO ] fr.inria.astor.core.validation.processbased.LaucherJUnitProcess.killProcess(LaucherJUnitProcess.java:171) - The Process that runs JUnit test cases did not terminate within waitTime of 10 seconds
[INFO ] fr.inria.astor.core.validation.processbased.LaucherJUnitProcess.killProcess(LaucherJUnitProcess.java:173) - Killed the Process that runs JUnit test cases 7299

2018/11/13

P. KGPの停止問題

https://github.com/kusumotolab/kGenProg/issues/392 上記ISSUEのせいでKGP修正がタイムアウトした後にプロセスが停止する. 実験が回せない. 無限ループ遺伝子一つでも生まれると発生するっぽい.

math80修正OK


2018/11/12

Docker化

実験環境をDocker化した.

P. astorはjdk1.8だとビルドできない

docker化で発生した問題. surefire & jdk8で発生するバグ.

https://issues.apache.org/jira/browse/SUREFIRE-1588 https://stackoverflow.com/questions/53010200/maven-surefire-could-not-find-forkedbooter-class?noredirect=1&lq=1

Math全てのpom.xmlに以下追記で対処

<useSystemClassLoader>false</useSystemClassLoader>

P. astor.jarは絶対パスで実行しないと死ぬ

NPEが出る

java -jar bin/astor.jar              # NPE
java -jar $(realpath bin/astor.jar)  # ok

準備

実験スクリプト

https://github.com/kusumotolab/kGenProg-exp

$ # macの人はsh使って下さい!!!

$ git clone git@github.com:kusumotolab/kGenProg-exp.git
$ cd kGenProg-exp

$ source util.sh
$ build_kgp # kgpのクローンとビルド
$ build_astor # astorのクローンとビルド

APR実行方法

Math73の場合

$ run kgp 85
$ run astor 85

KGPの実験用ブランチ

exp-for-journal を切りました. 上記スクリプトでは自動的にこのブランチに切り替えてjar生成します. https://github.com/kusumotolab/kGenProg/tree/exp-for-journal

links

kgp https://github.com/kusumotolab/kGenProg kgp-example https://github.com/kusumotolab/kGenProg-example astor https://github.com/SpoonLabs/astor apr比較 https://github.com/Spirals-Team/defects4j-repair/tree/master/results/2015-august


実験のためにやるべきこと

A. 実験環境の整備

担当:ま D4JのMathを対象に乱数を変えつつ自動で実験できる環境の整備. 実験スクリプトの作成とも言いかえて良い. GPUマシンで作成中.

起動構成を整理した表を作りたい. 人力で頑張るしかない.

target src test exec-test
math02 src/main/java src/test/java/ org.apache.xTest
math05 src/main/java src/test/java/ org.apache.xxxx
math73 src/main/java src/test/java/ org.apache.yyyy

B. KGPの改善/バグ修正

KGPで修正できない,あるいは圧倒的に敗北する題材が多数ある. 軽くで良いのでKGPを修正して良い実験結果を出せないか?

ひとまずMath73をなんとかしたい.

KGP-exampleに対する現状

summary

kgp astor
Math02 --
Math05 --
Math70 --
Math73 -- 12h ng 10m
Math73 MacBookPro13 1m14s 8m59s
Math85 -- 40s 40s
Math85 MacBookPro13 32s 43s

Math02

そもそも題材自体がテスト実行できないので両方死ぬ. どうもmaven周りっぽい. https://github.com/kusumotolab/kGenProg/issues/267 実験対象外にするか?

Math05

昔試したことがある.その時は失敗. https://github.com/kusumotolab/kGenProg/issues/269 現在のバージョンでどうかは未確認.

NPEですね.

2018-11-08 13:03:12 [main] [INFO]  jp.kusumotolab.kgenprog.KGenProgMain - in the era of the 1st generation (0 seconds)
2018-11-08 13:03:12 [main] [INFO]  jp.kusumotolab.kgenprog.ga.VariantStore - exec selection. 2nd variants: (1, 0) => 1
2018-11-08 13:03:12 [main] [INFO]  jp.kusumotolab.kgenprog.ga.EvolutionLogger - max fitness(0): 0.0
2018-11-08 13:03:12 [main] [INFO]  jp.kusumotolab.kgenprog.ga.EvolutionLogger - min fitness(0): 1.0
Exception in thread "main" java.lang.NullPointerException
        at jp.kusumotolab.kgenprog.ga.EvolutionLogger.isInitialVariant(EvolutionLogger.java:73)
        at jp.kusumotolab.kgenprog.ga.EvolutionLogger.writeToLogger(EvolutionLogger.java:63)
        at jp.kusumotolab.kgenprog.ga.EvolutionLogger.log(EvolutionLogger.java:54)
        at jp.kusumotolab.kgenprog.KGenProgMain.run(KGenProgMain.java:99)
        at jp.kusumotolab.kgenprog.CUILauncher.launch(CUILauncher.java:49)
        at jp.kusumotolab.kgenprog.CUILauncher.main(CUILauncher.java:27)

astorはexample配下にないので未実行.

Math73

圧倒的敗北.要議論 議論は別Headに切り出し.

Math85

両方修正可能. astorはマルチスレッドなので早い. KGPはインメモリなので早い.

kgenprog.tomlのパラメタ調整

time-limit       = 60000
test-time-limit  = 10
max-generation   = 3000
headcount        = 10
mutation-generating-count  = 100
crossover-generating-count = 0
# random-seed      = 123

議論 Math73

Humanパッチはこんなん APRでは不可能な内容

diff --git a/org/apache/commons/math/analysis/solvers/BrentSolver.java b/org/apache/commons/math/analysis/solvers/BrentSolver.java
index e0cb427..4e95ed5 100644
--- a/org/apache/commons/math/analysis/solvers/BrentSolver.java
+++ b/org/apache/commons/math/analysis/solvers/BrentSolver.java
@@ -32,11 +32,6 @@ import org.apache.commons.math.analysis.UnivariateRealFunction;
  */
 public class BrentSolver extends UnivariateRealSolverImpl {
 
+    /** Error message for non-bracketing interval. */
+    private static final String NON_BRACKETING_MESSAGE =
+        "function values at endpoints do not have different signs.  " +
+        "Endpoints: [{0}, {1}], Values: [{2}, {3}]";
-
     /** Serializable version identifier */
     private static final long serialVersionUID = 7694577816772532779L;
 
@@ -133,11 +128,6 @@ public class BrentSolver extends UnivariateRealSolverImpl {
             return solve(f, initial, yInitial, max, yMax, initial, yInitial);
         }
 
+        if (yMin * yMax > 0) {
+            throw MathRuntimeException.createIllegalArgumentException(
+                  NON_BRACKETING_MESSAGE, min, max, yMin, yMax);
+        }
-
         // full Brent algorithm starting with provided initial guess
         return solve(f, min, yMin, max, yMax, initial, yInitial);
 
@@ -186,7 +176,9 @@ public class BrentSolver extends UnivariateRealSolverImpl {
             } else {
                 // neither value is close to zero and min and max do not bracket root.
                 throw MathRuntimeException.createIllegalArgumentException(
+                        NON_BRACKETING_MESSAGE, min, max, yMin, yMax);
-                        "function values at endpoints do not have different signs.  " +
-                        "Endpoints: [{0}, {1}], Values: [{2}, {3}]",
-                        min, max, yMin, yMax);
             }
         } else if (sign < 0){
             // solve using only the first endpoint as initial guess

astorはこう.一行の置換修正

--- org/apache/commons/math/analysis/solvers/BrentSolver.java
+++ org/apache/commons/math/analysis/solvers/BrentSolver.java
@@ -129,9 +129,7 @@
                }
-               return solve(f, min, yMin, max, yMax, initial, yInitial);
-       }
@@ -141,6 +139,8 @@

+               return solve(f, min, initial);}
+

修正ファイルはBrentSolver kgpの上の該当する行の疑惑値は1.0になっているので,再利用がうまくいっていなさそう

再利用すべきコードは別ファイルにある.

$ find astor/examples/math_73/src/main/java/org/apache/commons/math/ -type f | xargs grep 'return solve(f, min, initial)'
.../solvers/LaguerreSolver.java:            return solve(f, min, initial);
.../solvers/MullerSolver.java:            return solve(f, min, initial);
.../solvers/RiddersSolver.java:            return solve(f, min, initial);

こいつをうまく再利用できていない. 再利用候補には入っている.

原因

kgpはプロジェクト全体から再利用候補を探しているため,再利用候補の数が膨大(17,000越え)になっているため,適切な再利用ができていない. astorの今の設定はパッケージ内から選んでいるため,再利用候補が少なく(500程度),成功していると考えられる.

Clone this wiki locally