Skip to content

Commit

Permalink
initial version of extended features (#45)
Browse files Browse the repository at this point in the history
improved implementation & fixed bugs
  • Loading branch information
Jian GU authored and martinezmatias committed Apr 1, 2019
1 parent 9ef2fc0 commit ec9bda1
Show file tree
Hide file tree
Showing 21 changed files with 698 additions and 877 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ nb-actions.xml
.classpath
.externalToolBuilders/
maven-eclipse.xml

# IDEA
.idea/
34 changes: 22 additions & 12 deletions src/main/java/fr/inria/prophet4j/Demo.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import fr.inria.prophet4j.defined.FeatureLearner;
import fr.inria.prophet4j.defined.RepairEvaluator;
import fr.inria.prophet4j.utility.Option;
import fr.inria.prophet4j.utility.Option.FeatureOption;
import fr.inria.prophet4j.utility.Option.DataOption;
import fr.inria.prophet4j.utility.Option.PatchOption;
import fr.inria.prophet4j.utility.Option.RankingOption;

import java.util.List;

Expand All @@ -25,37 +27,45 @@ private void learn() {

private void evaluate() {
RepairEvaluator repairEvaluator = new RepairEvaluator(option);
repairEvaluator.func4Demo();
repairEvaluator.func4Demo(RankingOption.D_CORRECT, RankingOption.D_INCORRECT);
repairEvaluator.func4Demo(RankingOption.D_HUMAN, RankingOption.D_CORRECT);
repairEvaluator.func4Demo(RankingOption.D_HUMAN, RankingOption.D_INCORRECT);
}

public static void main(String[] args) {
try {
Option option = new Option();
// new Demo(option).learn();
// new Demo(option).evaluate();
// option.featureOption = FeatureOption.EXTENDED;
new Demo(option).learn();
new Demo(option).evaluate();

option.patchOption = PatchOption.SPR;
// new Demo(option).learn();
// new Demo(option).evaluate();
new Demo(option).learn();

option.dataOption = DataOption.SANER;
// new Demo(option).learn();
// new Demo(option).evaluate();
new Demo(option).learn();
new Demo(option).evaluate();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
[original] Cardumen + Cardumen
19-03-24 12:59:17 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.2716190501574554
19-03-31 09:53:38 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.2657596928390742
[original] Cardumen + SPR
// i found NaN todo check
19-03-31 10:05:02 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.28822503830686835
[original] SANER + SPR
19-03-24 12:48:47 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.008142896242219158
19-03-31 10:26:04 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.008537303389384415
[extended] Cardumen + Cardumen
19-03-30 21:13:22 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.2583991587092498
[extended] Cardumen + SPR
19-03-30 21:20:57 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.29062909492440814
[extended] SANER + SPR
19-03-30 22:12:05 INFO FeatureLearner:222 - 5-fold Cross Validation: 0.010966064135150921
*/
// todo (improve Feature or FeatureCross)
// todo (try on other candidate-patches generators)
// todo (draw graphs on 1k commits for Martin)
// todo (try other patch-generators)
// todo (run on PGA commits)
// todo (integrate Coming and Prophet4J)
// todo (integrate with Repairnator)
}
1 change: 1 addition & 0 deletions src/main/java/fr/inria/prophet4j/defined/CodeDiffer.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ private List<FeatureVector> genFeatureVectors(Diff diff) {
featureVectors.add(featureVector);
}
if (forLearner) {
// we could also try on other patches-generators
for (Repair repair: generator.obtainRepairCandidates()) {
FeatureVector featureVector = new FeatureVector(false);
for (CtElement atom : repair.getCandidateAtoms()) {
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/fr/inria/prophet4j/defined/FeatureLearner.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public FeatureLearner(Option option) {
// private double getLogSumExp(double[] array) {
// assert array.length > 0;
// double max = Arrays.stream(array).max().getAsDouble();
// double sum = 0.0;
// double sum = 0;
// for (double value : array) {
// sum += Math.exp(value - max);
// }
Expand All @@ -50,8 +50,8 @@ private double[] newFeatureArray() {
}

private ParameterVector learn(List<Sample> trainingData, List<Sample> validationData) {
double alpha = 1.0;
double gammaBest = 1.0;
double alpha = 1;
double gammaBest = 1;
final double lambda = 1e-3;
ParameterVector theta = new ParameterVector(option.featureOption);
ParameterVector thetaBest = new ParameterVector(option.featureOption);
Expand Down Expand Up @@ -95,7 +95,7 @@ private ParameterVector learn(List<Sample> trainingData, List<Sample> validation
if (featureVector.isMarked()) {
List<FeatureCross> featureCrosses = featureVector.getFeatureCrosses();
for (FeatureCross featureCross : featureCrosses) {
// 1 is derived before but i forget the procedure 03/24 todo check
// 1 was derived before but i forget the procedure 03/24 todo check
// but i believe it is okay as 1 is also used in the original project
delta.inc(featureCross.getId(), 1.0 / markedSize);
}
Expand All @@ -111,7 +111,7 @@ private ParameterVector learn(List<Sample> trainingData, List<Sample> validation
List<FeatureCross> featureCrosses = featureVector.getFeatureCrosses();
for (FeatureCross featureCross : featureCrosses) {
int featureCrossId = featureCross.getId();
tmpValues[featureCrossId] += Math.max(0.0, scores[i] - scores[0] + 1);
tmpValues[featureCrossId] += Math.max(0, scores[i] - scores[0] + 1);
}
}
for (int i = 0; i < tmpValues.length; i++) {
Expand All @@ -138,7 +138,7 @@ private ParameterVector learn(List<Sample> trainingData, List<Sample> validation
theta.inc(i, alpha * delta.get(i));
}
// handle validation data
double gamma = 0.0;
double gamma = 0;
for (Sample sample : validationData) {
List<FeatureVector> featureVectors = sample.getFeatureVectors();
double[] scores = new double[featureVectors.size()];
Expand Down Expand Up @@ -201,8 +201,8 @@ public void func4Demo(List<String> filePaths) {
for (int i = 0; i < sampleData.size(); i++) {
folds.get(i % 5).add(sampleData.get(i));
}
double gammaBest = 1.0;
double gammaAverage = 0.0;
double gammaBest = 1;
double gammaAverage = 0;
for (int i = 0; i < k; i++) {
List<Sample> trainingData = new ArrayList<>();
for (int j = 0; j < k; j++) {
Expand Down
Loading

0 comments on commit ec9bda1

Please sign in to comment.