Skip to content

Commit

Permalink
add information to summary output
Browse files Browse the repository at this point in the history
  • Loading branch information
RyokoIzuta committed Sep 1, 2020
1 parent 01a5106 commit 282c31b
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/main/java/jp/kusumotolab/kgenprog/KGenProgMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jp.kusumotolab.kgenprog.fl.FaultLocalization;
Expand Down Expand Up @@ -117,6 +118,9 @@ public List<Variant> run() throws RuntimeException {
// 世代別サマリの出力
logGenerationSummary(stopwatch.toString(), variantsByMutation, variantsByCrossover);
stopwatch.split();
variantStore.updateVariantCounts(
Stream.concat(variantsByMutation.stream(), variantsByCrossover.stream())
.collect(Collectors.toList()));

// しきい値以上の completedVariants が生成された場合は,GA を抜ける
if (areEnoughCompletedVariants(variantStore.getFoundSolutions())) {
Expand Down Expand Up @@ -146,7 +150,9 @@ public List<Variant> run() throws RuntimeException {

stopwatch.unsplit();
strategies.finish();
logGAStopped(variantStore.getGenerationNumber(), stopwatch.toString(), exitStatus);
logGAStopped(variantStore.getGenerationNumber(), variantStore.getVariantCount(),
variantStore.getSyntaxValidVariantCount(), variantStore.getBuildSuccessVariantCount(),
stopwatch.toString(), exitStatus);

return variantStore.getFoundSolutions(config.getRequiredSolutionsCount());
}
Expand Down Expand Up @@ -289,7 +295,8 @@ private DecimalFormat createDecimalFormat() {
return new DecimalFormat("#.###");
}

private void logGAStopped(final OrdinalNumber generation, final String time,
private void logGAStopped(final OrdinalNumber generation, final int variantCount,
final int syntaxValidCount, final int buildSuccessCount, final String time,
final ExitStatus exitStatus) {
final StringBuilder sb = new StringBuilder();
sb//
Expand All @@ -298,6 +305,15 @@ private void logGAStopped(final OrdinalNumber generation, final String time,
.append("Reached generation = ")
.append(generation.intValue())
.append(System.lineSeparator())
.append("Generated variants = ")
.append(variantCount)
.append(System.lineSeparator())
.append("Syntax valid variants = ")
.append(syntaxValidCount)
.append(System.lineSeparator())
.append("Build succeeded variants = ")
.append(buildSuccessCount)
.append(System.lineSeparator())
.append("Time elapsed = ")
.append(time)
.append(System.lineSeparator())
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/jp/kusumotolab/kgenprog/ga/variant/VariantStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ public class VariantStore {
private final AtomicLong variantCounter;
private final Function<HistoricalElement, HistoricalElement> elementReplacer;
private final Consumer<Variant> variantRecorder;
private int variantCount;
private int syntaxValidVariantCount;
private int buildSuccessVariantCount;

/**
* @param config 設定
Expand All @@ -57,6 +60,9 @@ public VariantStore(final Configuration config, final Strategies strategies) {
foundSolutions = new ArrayList<>();
// 最後に次の世代番号に進めておく
generation.incrementAndGet();
variantCount = 0;
syntaxValidVariantCount = 0;
buildSuccessVariantCount = 0;
}

/**
Expand Down Expand Up @@ -129,6 +135,27 @@ public List<Variant> getFoundSolutions(final int maxNumber) {
return foundSolutions.subList(0, length);
}

/**
* @return 今まで生成した個体数
*/
public int getVariantCount() {
return variantCount;
}

/**
* @return 今まで生成した個体のうち、Syntax Valid な個体数
*/
public int getSyntaxValidVariantCount() {
return syntaxValidVariantCount;
}

/**
* @return 今まで生成した個体のうち、ビルド成功個体数
*/
public int getBuildSuccessVariantCount() {
return buildSuccessVariantCount;
}

/**
* 引数の要素すべてを次世代のVariantとして追加する
*
Expand Down Expand Up @@ -233,4 +260,19 @@ private Consumer<Variant> newVariantRecorder(final boolean historyRecord) {
public Configuration getConfiguration() {
return config;
}

/**
* variantCount, syntaxValidVariantCount, buildSuccessVariantCountを更新する
*
* @param variants 前回の更新以降新たに生成した個体のリスト
*/
public void updateVariantCounts(final List<Variant> variants) {
variantCount += variants.size();
syntaxValidVariantCount += variants.stream()
.filter(Variant::isSyntaxValid)
.count();
buildSuccessVariantCount += variants.stream()
.filter(Variant::isBuildSucceeded)
.count();
}
}

0 comments on commit 282c31b

Please sign in to comment.