Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grounder restart #361

Open
wants to merge 56 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
c87f5c8
Add naive solver and grounder restart
Jul 18, 2022
ce135ea
Add reset for atom counter and nogood counter
Aug 4, 2022
287aedf
Fix choice replay during restart, add replay of enumeration nogoods
Aug 4, 2022
c3197c1
Fix license comments
Aug 4, 2022
04a7d07
Add separate structure for ground rule uniqueness check
Aug 6, 2022
e10a13e
Add heuristic state reset for VSIDS
Aug 6, 2022
3d39abf
Add grounder assignment sync in decision replay during restart
Aug 6, 2022
7c74673
Add reset for EnumerationAtom in grounder restart
Aug 13, 2022
1265f20
Rename collection of atomized nogoods
Aug 13, 2022
66477d2
Fix chained branching heuristic reset
Aug 13, 2022
bf43569
Add configuration parameters for restarts
Aug 13, 2022
62e1900
Remove debugging output
Aug 15, 2022
3b3343f
Add test configurations with restarts enabled
Aug 15, 2022
6c029a1
Ignore specific test case if restarts enabled
Aug 15, 2022
318c28b
Fix growing for atom ids during choice replay in restart
Aug 16, 2022
0749bd0
Add unit tests for atomized structures, create package for solver and…
Sep 2, 2022
9abb63e
Fix imports and code style
Sep 2, 2022
a5329f4
Refactor unit tests for atomized structures
Sep 6, 2022
de91827
Add nogood type to atomized nogoods
Sep 20, 2022
1e6b528
Enable repeated restarts, keep learnt nogoods at restart
Sep 20, 2022
e91e194
Add runtime performance logging
Sep 21, 2022
b101c95
Rename solver and grounder restart to reboot, fix reboot tests
Sep 21, 2022
d620419
Prevent VSIDS from ignoring learnt nogoods, rename reboot related pac…
Sep 23, 2022
48d9270
Fix propagation stopwatch
Oct 4, 2022
759c551
Fix reboot repeat command line option
Oct 18, 2022
658457e
Store learnt nogoods also after assignment is closed
Oct 20, 2022
cf68c6a
Add additional statistic tracking
Oct 20, 2022
b5f9474
Move propagation stat tracking to separate class
Oct 21, 2022
5c518b3
Extend reboot strategy interface
Oct 21, 2022
91640c2
Implement simple dynamic reboot strategy
Nov 2, 2022
52b54e4
Minor naming and documentation changes
Nov 3, 2022
eaf9d5c
Merge branch 'master' into grounder_restart
Nov 3, 2022
212f15c
Implement regrounding rules for rule atoms after reboot
Nov 8, 2022
1902d0c
Remove assumption about choice points
Nov 9, 2022
700ae2b
Fix code style
Nov 10, 2022
8d74174
Remove enumeration atom reset during reboot
Nov 14, 2022
9d99858
Add luby learned strategy, move strategy calls
Nov 15, 2022
2da3694
Fix logging
Nov 18, 2022
6b36e0e
Fix dynamic reboot strategy
Nov 26, 2022
ec49b53
Add reboot strategies and add empty default implementations
Dec 6, 2022
913902d
Fix code style
Dec 6, 2022
1c94cb1
Change reboot strategy
Dec 13, 2022
7998ec9
Add reboot strategy parametrization
Feb 24, 2023
ffff229
Merge master into grounder_restart, use RuleAtomData instead of String
Feb 25, 2023
8de2657
Remove obsolete Substitutions class, track enumeration nogoods in fix…
Feb 28, 2023
f106f31
Track enumeration nogoods in static reboot strategies, fix long optio…
Mar 1, 2023
227cd61
Rename solver option
Mar 1, 2023
3dfad44
Remove stat trackers and stop watches
Mar 17, 2023
d94a8d0
Merge branch 'master' into grounder_restart
Jul 18, 2023
8f2d6a3
Add reboot strategy parameters to tests
Jul 18, 2023
4a51d9e
Remove obsolete test configurations
Jul 18, 2023
7481758
Reduce nesting depth
Jul 20, 2023
dbaab67
Add reboot strategy tests
Jul 23, 2023
20c6ebd
Add tests of ground explosion program
Jul 26, 2023
8bfecd7
Add berkmin heuristic reset for reboot
Jul 26, 2023
b383996
Remove extra log output
Jul 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package at.ac.tuwien.kr.alpha.api.config;

import java.util.Arrays;
import java.util.stream.Collectors;

/**
* The available reboot strategies.
*/
public enum RebootStrategyEnum {
FIXED,
GEOM,
LUBY,
ASSIGN,
ANSWER;

/**
* @return a comma-separated list of names of known reboot strategies
*/
public static String listAllowedValues() {
return Arrays.stream(values()).map(RebootStrategyEnum::toString).collect(Collectors.joining(", "));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

/**
* Config structure for {@link Alpha} instances.
*
*
* Copyright (c) 2021, the Alpha Team.
*/
public class SystemConfig {
Expand All @@ -49,6 +49,12 @@ public class SystemConfig {
public static final String DEFAULT_NOGOOD_STORE_NAME = "alphaRoaming";
public static final Heuristic DEFAULT_BRANCHING_HEURISTIC = Heuristic.VSIDS;
public static final BinaryNoGoodPropagationEstimationStrategy DEFAULT_MOMS_STRATEGY = BinaryNoGoodPropagationEstimationStrategy.CountBinaryWatches;
public static final boolean DEFAULT_REBOOT_ENABLED = false;
public static final boolean DEFAULT_DISABLE_REBOOT_REPEAT = false;
public static final RebootStrategyEnum DEFAULT_REBOOT_STRATEGY = RebootStrategyEnum.ANSWER;
public static final int DEFAULT_REBOOT_STRATEGY_INTERVAL = 10000;
public static final double DEFAULT_REBOOT_STRATEGY_BASE = 1.5;
public static final double DEFAULT_REBOOT_STRATEGY_FACTOR = 2;
public static final long DEFAULT_SEED = System.nanoTime();
public static final boolean DEFAULT_DETERMINISTIC = false;
public static final boolean DEFAULT_PRINT_STATS = false;
Expand All @@ -73,6 +79,12 @@ public class SystemConfig {
private boolean debugInternalChecks = DEFAULT_DEBUG_INTERNAL_CHECKS;
private Heuristic branchingHeuristic = DEFAULT_BRANCHING_HEURISTIC;
private BinaryNoGoodPropagationEstimationStrategy momsStrategy = DEFAULT_MOMS_STRATEGY;
private boolean rebootEnabled = DEFAULT_REBOOT_ENABLED;
private boolean disableRebootRepeat = DEFAULT_DISABLE_REBOOT_REPEAT;
private RebootStrategyEnum rebootStrategy = DEFAULT_REBOOT_STRATEGY;
private int rebootStrategyInterval = DEFAULT_REBOOT_STRATEGY_INTERVAL;
private double rebootStrategyBase = DEFAULT_REBOOT_STRATEGY_BASE;
private double rebootStrategyFactor = DEFAULT_REBOOT_STRATEGY_FACTOR;
private boolean quiet = DEFAULT_QUIET;
private boolean printStats = DEFAULT_PRINT_STATS;
private boolean disableJustificationSearch = DEFAULT_DISABLE_JUSTIFICATION_SEARCH;
Expand Down Expand Up @@ -119,6 +131,58 @@ public void setNogoodStoreName(String nogoodStoreName) {
this.nogoodStoreName = nogoodStoreName;
}

public boolean isRebootEnabled() {
return this.rebootEnabled;
}

public void setRebootEnabled(boolean rebootEnabled) {
this.rebootEnabled = rebootEnabled;
}

public boolean isDisableRebootRepeat() {
return this.disableRebootRepeat;
}

public void setDisableRebootRepeat(boolean disableRebootRepeat) {
this.disableRebootRepeat = disableRebootRepeat;
}

public RebootStrategyEnum getRebootStrategy() {
return this.rebootStrategy;
}

public void setRebootStrategy(RebootStrategyEnum rebootStrategy) {
this.rebootStrategy = rebootStrategy;
}

public void setRebootStrategyName(String rebootStrategyName) {
this.rebootStrategy = RebootStrategyEnum.valueOf(rebootStrategyName.replace("-", "_").toUpperCase());
}

public int getRebootStrategyInterval() {
return this.rebootStrategyInterval;
}

public void setRebootStrategyInterval(int rebootStrategyInterval) {
this.rebootStrategyInterval = rebootStrategyInterval;
}

public double getRebootStrategyBase() {
return this.rebootStrategyBase;
}

public void setRebootStrategyBase(double rebootStrategyBase) {
this.rebootStrategyBase = rebootStrategyBase;
}

public double getRebootStrategyFactor() {
return this.rebootStrategyFactor;
}

public void setRebootStrategyFactor(double rebootStrategyFactor) {
this.rebootStrategyFactor = rebootStrategyFactor;
}

public boolean isDeterministic() {
return this.deterministic;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import java.util.Map;
import java.util.function.Consumer;

import at.ac.tuwien.kr.alpha.api.config.*;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
Expand All @@ -45,13 +46,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import at.ac.tuwien.kr.alpha.api.config.AggregateRewritingConfig;
import at.ac.tuwien.kr.alpha.api.config.AlphaConfig;
import at.ac.tuwien.kr.alpha.api.config.BinaryNoGoodPropagationEstimationStrategy;
import at.ac.tuwien.kr.alpha.api.config.Heuristic;
import at.ac.tuwien.kr.alpha.api.config.InputConfig;
import at.ac.tuwien.kr.alpha.api.config.SystemConfig;

/**
* Parses given argument lists (as passed when Alpha is called from command line) into {@link SystemConfig}s and
* {@link InputConfig}s.
Expand Down Expand Up @@ -98,6 +92,21 @@ public class CommandLineParser {
.desc("the solver implementation to use (default: " + SystemConfig.DEFAULT_SOLVER_NAME + ")").build();
private static final Option OPT_NOGOOD_STORE = Option.builder("r").longOpt("store").hasArg(true).argName("store")
.desc("the nogood store to use (default: " + SystemConfig.DEFAULT_NOGOOD_STORE_NAME + ")").build();
private static final Option OPT_REBOOT_ENABLED = Option.builder("rbt").longOpt("enableReboot")
.desc("enable solver reboots (default: " + SystemConfig.DEFAULT_REBOOT_ENABLED + ")").build();
private static final Option OPT_NO_REBOOT_REPEAT = Option.builder("drr").longOpt("disableRebootRepeat")
.desc("disables repeated reboots resulting in at most one reboot during solving, only effective if reboot is enabled (default: " + SystemConfig.DEFAULT_DISABLE_REBOOT_REPEAT + ")").build();
private static final Option OPT_REBOOT_STRATEGY = Option.builder("rbs").longOpt("rebootStrategy").hasArg(true).argName("strategy")
.desc("the reboot strategy to use (default: " + SystemConfig.DEFAULT_REBOOT_STRATEGY.name() + ")").build();
private static final Option OPT_REBOOT_STRATEGY_INTERVAL = Option.builder("rsi").longOpt("rebootStrategyInterval")
.hasArg(true).argName("number").type(Integer.class)
.desc("the size of the interval between reboots for a fixed reboot strategy (default: " + SystemConfig.DEFAULT_REBOOT_STRATEGY_INTERVAL + ")").build();
private static final Option OPT_REBOOT_STRATEGY_BASE = Option.builder("rsb").longOpt("rebootStrategyBase")
.hasArg(true).argName("number").type(Double.class)
.desc("the base value of a reboot strategy (default: " + SystemConfig.DEFAULT_REBOOT_STRATEGY_BASE + ")").build();
private static final Option OPT_REBOOT_STRATEGY_FACTOR = Option.builder("rsf").longOpt("rebootStrategyFactor")
.hasArg(true).argName("number").type(Double.class)
.desc("the scaling factor of a reboot strategy (default: " + SystemConfig.DEFAULT_REBOOT_STRATEGY_FACTOR + ")").build();
private static final Option OPT_SORT = Option.builder("sort").longOpt("sort").hasArg(false)
.desc("sort answer sets (default: " + SystemConfig.DEFAULT_SORT_ANSWER_SETS + ")").build();
private static final Option OPT_DETERMINISTIC = Option.builder("d").longOpt("deterministic").hasArg(false)
Expand Down Expand Up @@ -174,6 +183,12 @@ public class CommandLineParser {
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_GROUNDER);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_SOLVER);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_NOGOOD_STORE);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_REBOOT_ENABLED);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_NO_REBOOT_REPEAT);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_REBOOT_STRATEGY);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_REBOOT_STRATEGY_INTERVAL);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_REBOOT_STRATEGY_BASE);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_REBOOT_STRATEGY_FACTOR);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_SORT);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_DETERMINISTIC);
CommandLineParser.CLI_OPTS.addOption(CommandLineParser.OPT_SEED);
Expand Down Expand Up @@ -232,6 +247,12 @@ private void initializeGlobalOptionHandlers() {
this.globalOptionHandlers.put(CommandLineParser.OPT_GROUNDER.getOpt(), this::handleGrounder);
this.globalOptionHandlers.put(CommandLineParser.OPT_SOLVER.getOpt(), this::handleSolver);
this.globalOptionHandlers.put(CommandLineParser.OPT_NOGOOD_STORE.getOpt(), this::handleNogoodStore);
this.globalOptionHandlers.put(CommandLineParser.OPT_REBOOT_ENABLED.getOpt(), this::handleRebootEnabled);
this.globalOptionHandlers.put(CommandLineParser.OPT_NO_REBOOT_REPEAT.getOpt(), this::handleDisableRebootRepeat);
this.globalOptionHandlers.put(CommandLineParser.OPT_REBOOT_STRATEGY.getOpt(), this::handleRebootStrategy);
this.globalOptionHandlers.put(CommandLineParser.OPT_REBOOT_STRATEGY_INTERVAL.getOpt(), this::handleRebootStrategyInterval);
this.globalOptionHandlers.put(CommandLineParser.OPT_REBOOT_STRATEGY_BASE.getOpt(), this::handleRebootStrategyBase);
this.globalOptionHandlers.put(CommandLineParser.OPT_REBOOT_STRATEGY_FACTOR.getOpt(), this::handleRebootStrategyFactor);
this.globalOptionHandlers.put(CommandLineParser.OPT_SORT.getOpt(), this::handleSort);
this.globalOptionHandlers.put(CommandLineParser.OPT_DETERMINISTIC.getOpt(), this::handleDeterministic);
this.globalOptionHandlers.put(CommandLineParser.OPT_SEED.getOpt(), this::handleSeed);
Expand Down Expand Up @@ -353,6 +374,57 @@ private void handleNogoodStore(Option opt, SystemConfig cfg) {
cfg.setNogoodStoreName(opt.getValue(SystemConfig.DEFAULT_NOGOOD_STORE_NAME));
}

private void handleRebootEnabled(Option opt, SystemConfig cfg) {
cfg.setRebootEnabled(true);
}

private void handleDisableRebootRepeat(Option opt, SystemConfig cfg) {
cfg.setDisableRebootRepeat(true);
}

private void handleRebootStrategy(Option opt, SystemConfig cfg) throws ParseException {
String rebootStrategyName = opt.getValue(SystemConfig.DEFAULT_REBOOT_STRATEGY.name());
try {
cfg.setRebootStrategyName(rebootStrategyName);
} catch (IllegalArgumentException e) {
throw new ParseException(
"Unknown reboot strategy: " + rebootStrategyName + ". Please try one of the following: " + RebootStrategyEnum.listAllowedValues());
}
}

private void handleRebootStrategyInterval(Option opt, SystemConfig cfg) {
String optVal = opt.getValue();
int limit;
if (optVal != null) {
limit = Integer.parseInt(optVal);
cfg.setRebootStrategyInterval(limit);
} else {
cfg.setRebootStrategyInterval(SystemConfig.DEFAULT_REBOOT_STRATEGY_INTERVAL);
}
}

private void handleRebootStrategyBase(Option opt, SystemConfig cfg) {
String optVal = opt.getValue();
double limit;
if (optVal != null) {
limit = Double.parseDouble(optVal);
cfg.setRebootStrategyBase(limit);
} else {
cfg.setRebootStrategyBase(SystemConfig.DEFAULT_REBOOT_STRATEGY_BASE);
}
}

private void handleRebootStrategyFactor(Option opt, SystemConfig cfg) {
String optVal = opt.getValue();
double limit;
if (optVal != null) {
limit = Double.parseDouble(optVal);
cfg.setRebootStrategyFactor(limit);
} else {
cfg.setRebootStrategyFactor(SystemConfig.DEFAULT_REBOOT_STRATEGY_FACTOR);
}
}

private void handleFilters(Option opt, InputConfig cfg) {
String pred = opt.getValue().trim();
cfg.getDesiredPredicates().add(pred);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,9 @@ default <T extends NoGoodInterface> String noGoodToString(T noGood) {
}

AtomCounter getAtomCounter();

/**
* Clears all data within the atom store and resets it to its initial empty state.
*/
void reset();
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,19 @@ public int get(Atom atom) {
public AtomCounter getAtomCounter() {
return atomCounter;
}

@Override
public void reset() {
atomIdsToInternalBasicAtoms.clear();
atomIdsToInternalBasicAtoms.add(null);

predicateInstancesToAtomIds.clear();

atomIdGenerator.resetGenerator();
atomIdGenerator.getNextId();

releasedAtomIds.clear();

atomCounter.reset();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ public Map<Integer, Set<Integer>> getAndResetHeadsToBodies() {
return currentHeadsToBodies;
}


public List<NoGood> generateChoiceNoGoods(final List<Integer> posLiterals, final List<Integer> negLiterals, final int bodyRepresentingLiteral) {
// Obtain an ID for this new choice.
final int choiceId = ID_GENERATOR.getNextId();
Expand All @@ -94,7 +93,7 @@ private NoGood generatePos(final int atomOn, List<Integer> posLiterals) {
return NoGood.fromBodyInternal(posLiterals, emptyList(), literalOn);
}

private List<NoGood> generateNeg(final int atomOff, List<Integer> negLiterals) {
private List<NoGood> generateNeg(final int atomOff, List<Integer> negLiterals) {
final int negLiteralOff = negateLiteral(atomToLiteral(atomOff));

final List<NoGood> noGoods = new ArrayList<>(negLiterals.size() + 1);
Expand All @@ -115,6 +114,12 @@ public void addHeadToBody(int headId, int bodyId) {
existingBodies.add(bodyId);
}

public void reset() {
ID_GENERATOR.resetGenerator();
newChoiceAtoms = new ImmutablePair<>(new LinkedHashMap<>(), new LinkedHashMap<>());
newHeadsToBodies = new LinkedHashMap<>();
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder("[enablers: ");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import java.util.SortedSet;
import java.util.TreeSet;

import at.ac.tuwien.kr.alpha.api.programs.terms.ConstantTerm;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
Expand Down Expand Up @@ -82,7 +83,7 @@
*
* Copyright (c) 2016-2020, the Alpha Team.
*/
public class NaiveGrounder extends BridgedGrounder implements ProgramAnalyzingGrounder {
public class NaiveGrounder extends BridgedGrounder implements ProgramAnalyzingGrounder, RebootableGrounder {
private static final Logger LOGGER = LoggerFactory.getLogger(NaiveGrounder.class);

private final WorkingMemory workingMemory = new WorkingMemory();
Expand Down Expand Up @@ -139,6 +140,7 @@ private NaiveGrounder(CompiledProgram program, AtomStore atomStore, GrounderHeur

this.debugInternalChecks = debugInternalChecks;


// Initialize RuleInstantiator and instantiation strategy. Note that the instantiation strategy also
// needs the current assignment, which is set with every call of getGroundInstantiations.
this.instantiationStrategy = new DefaultLazyGroundingInstantiationStrategy(this.workingMemory, this.atomStore, this.factsFromProgram,
Expand Down Expand Up @@ -364,7 +366,7 @@ public Map<Integer, NoGood> getNoGoods(Assignment currentAssignment) {
modifiedWorkingMemory.markRecentlyAddedInstancesDone();
}

workingMemory.reset();
workingMemory.resetModified();
for (Atom removeAtom : removeAfterObtainingNewNoGoods) {
final IndexedInstanceStorage storage = workingMemory.get(removeAtom, true);
Instance instance = new Instance(removeAtom.getTerms());
Expand Down Expand Up @@ -412,6 +414,37 @@ public int register(NoGood noGood) {
return registry.register(noGood);
}

@Override
public void reboot(Assignment currentAssignment) {
workingMemory.reset();
registry.reset();
noGoodGenerator.reset();
choiceRecorder.reset();
analyzeUnjustified.reset();
rulesUsingPredicateWorkingMemory.clear();
removeAfterObtainingNewNoGoods = new LinkedHashSet<>();
instantiationStrategy.setStaleWorkingMemoryEntries(removeAfterObtainingNewNoGoods);
instantiationStrategy.setCurrentAssignment(currentAssignment);
fixedRules = new ArrayList<>();
initializeFactsAndRules();
}

@Override
public Map<Integer, NoGood> forceRuleGrounding(RuleAtom atom) {
Map<Integer, NoGood> newNoGoods = new LinkedHashMap<>();

// Translate RuleAtom back to NonGroundRule + Substitution.
RuleAtom.RuleAtomData ruleAtomData = (RuleAtom.RuleAtomData) ((ConstantTerm<?>)(atom.getTerms().get(0))).getObject();
CompiledRule nonGroundRule = ruleAtomData.getNonGroundRule();
Substitution groundingSubstitution = ruleAtomData.getSubstitution();

// Generate the rules that correspond to the RuleAtom
List<NoGood> generatedNoGoods = noGoodGenerator.generateNoGoodsFromGroundSubstitution(
nonGroundRule, groundingSubstitution);
registry.register(generatedNoGoods, newNoGoods);
return newNoGoods;
}

// Ideally, this method should be private. It's only visible because NaiveGrounderTest needs to access it.
BindingResult getGroundInstantiations(CompiledRule rule, RuleGroundingOrder groundingOrder, Substitution partialSubstitution,
Assignment currentAssignment) {
Expand All @@ -438,7 +471,7 @@ BindingResult getGroundInstantiations(CompiledRule rule, RuleGroundingOrder grou
}

/**
* Helper method used by {@link NaiveGrounder#bindNextAtomInRule(RuleGroundingOrderImpl, int, int, int, BasicSubstitution)}.
* Helper method used by {@link NaiveGrounder#bindNextAtomInRule(RuleGroundingOrder, int, int, int, Substitution)}.
*
* Takes an <code>ImmutablePair</code> of a {@link BasicSubstitution} and an accompanying {@link AssignmentStatus} and calls
* <code>bindNextAtomInRule</code> for the next literal in the grounding order.
Expand Down Expand Up @@ -620,7 +653,7 @@ public Set<Literal> justifyAtom(int atomToJustify, Assignment currentAssignment)

/**
* Checks that every nogood not marked as {@link NoGoodInterface.Type#INTERNAL} contains only
* atoms which are not {@link PredicateImpl#isSolverInternal()} (except {@link RuleAtom}s, which are allowed).
* atoms which are not {@link Predicate#isSolverInternal()} (except {@link RuleAtom}s, which are allowed).
*
* @param newNoGoods
*/
Expand Down
Loading