Skip to content

Commit 9c6c09c

Browse files
fix: merge fixes
1 parent c6c7211 commit 9c6c09c

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ShadowVariableSupport.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ public final class ShadowVariableSupport<Solution_> implements SupplyManager {
5050

5151
public static <Solution_> ShadowVariableSupport<Solution_> create(InnerScoreDirector<Solution_, ?> scoreDirector) {
5252
return new ShadowVariableSupport<>(scoreDirector,
53-
TimefoldSolverEnterpriseService.loadOrDefault(service -> service::buildTopologyGraph,
53+
TimefoldSolverEnterpriseService.loadOrDefault(
54+
service -> size -> service.buildTopologyGraph(size,
55+
scoreDirector.ignoreInconsistentSolutions()),
5456
() -> DefaultTopologicalOrderGraph::new));
5557
}
5658

@@ -303,7 +305,8 @@ public void resetWorkingSolution() {
303305
scoreDirector,
304306
shadowVariableGraphCreator);
305307
shadowVariableSession =
306-
shadowVariableSessionFactory.forSolution(consistencyTracker, scoreDirector.getWorkingSolution());
308+
shadowVariableSessionFactory.forSolution(consistencyTracker, scoreDirector.ignoreInconsistentSolutions(),
309+
scoreDirector.getWorkingSolution());
307310
}
308311
}
309312

@@ -412,11 +415,12 @@ public boolean updateShadowVariables() {
412415
if (shadowVariableSession != null) {
413416
if (!shadowVariableSession.updateVariables()) {
414417
updateSuccessful = false;
415-
notificationQueuesAreEmpty = true;
416418
return false;
417419
}
418420
}
419421
dirty = false;
422+
updateSuccessful = true;
423+
return true;
420424
}
421425

422426
public List<Object> getInconsistentEntities() {

core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,14 +344,14 @@ protected void afterSetWorkingSolution() {
344344
}
345345

346346
public void unassignInconsistentEntities() {
347-
var inconsistentEntities = variableListenerSupport.getInconsistentEntities();
347+
var inconsistentEntities = shadowVariableSupport.getInconsistentEntities();
348348
if (listVariableStateSupply != null) {
349349
var listVariableDescriptor = listVariableStateSupply.getSourceVariableDescriptor();
350350
var listElementClass = listVariableStateSupply.getSourceVariableDescriptor().getElementType();
351351
for (var inconsistentEntity : inconsistentEntities) {
352352
if (listElementClass.isInstance(inconsistentEntity)) {
353353
var inverse = Objects.requireNonNull(listVariableStateSupply.getInverseSingleton(inconsistentEntity));
354-
int index = Objects.requireNonNull(listVariableStateSupply.getIndex(inconsistentEntity));
354+
int index = listVariableStateSupply.getIndexOrFail(inconsistentEntity);
355355

356356
if (listVariableDescriptor.isElementPinned(Objects.requireNonNull(workingSolution), inverse, index)) {
357357
throw new IllegalStateException("""
@@ -364,7 +364,7 @@ public void unassignInconsistentEntities() {
364364
listVariableDescriptor.removeElement(inverse, index);
365365
afterListVariableChanged(listVariableDescriptor, inverse, index, index);
366366
afterListVariableElementUnassigned(listVariableDescriptor, inconsistentEntity);
367-
triggerVariableListeners();
367+
updateShadowVariables();
368368
}
369369
// Unassign any normal @PlanningVariable on the entity too
370370
unassignPlainEntity(inconsistentEntity);
@@ -393,7 +393,7 @@ private void unassignPlainEntity(Object inconsistentEntity) {
393393
genuineVariableDescriptor.setValue(inconsistentEntity, null);
394394
afterVariableChanged(genuineVariableDescriptor, inconsistentEntity);
395395
}
396-
triggerVariableListeners();
396+
updateShadowVariables();
397397
}
398398

399399
@Override

0 commit comments

Comments
 (0)