Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -3,8 +3,8 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.api.domain.variable.PlanningListVariable;
import ai.timefold.solver.core.api.domain.variable.PlanningVariable;
Expand Down Expand Up @@ -54,9 +54,9 @@ public interface ValueRange<T> {
* Each element might be selected multiple times.
* Scales well because it does not require caching.
*
* @param workingRandom the {@link Random} to use when any random number is needed,
* @param workingRandom the {@link RandomGenerator} to use when any random number is needed,
* so runs are reproducible.
*/
Iterator<T> createRandomIterator(Random workingRandom);
Iterator<T> createRandomIterator(RandomGenerator workingRandom);

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ai.timefold.solver.core.config.heuristic.selector.move;

import java.util.Random;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.impl.heuristic.selector.common.nearby.NearbyDistanceMeter;

Expand All @@ -20,6 +20,7 @@ public interface NearbyAutoConfigurationEnabled<Config_ extends MoveSelectorConf
* @return new instance with the Nearby Selection settings properly configured
*/
@NonNull
Config_ enableNearbySelection(@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random);
Config_ enableNearbySelection(@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull RandomGenerator random);

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ai.timefold.solver.core.config.heuristic.selector.move;

import java.util.Random;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.config.heuristic.selector.common.nearby.NearbySelectionConfig;
import ai.timefold.solver.core.config.heuristic.selector.entity.EntitySelectorConfig;
Expand All @@ -20,15 +20,16 @@
public final class NearbyUtil {

public static @NonNull ChangeMoveSelectorConfig enable(@NonNull ChangeMoveSelectorConfig changeMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = changeMoveSelectorConfig.copyConfig();
var entityConfig = configureEntitySelector(nearbyConfig.getEntitySelectorConfig(), random);
var valueConfig = configureValueSelector(nearbyConfig.getValueSelectorConfig(), entityConfig.getId(), distanceMeter);
return nearbyConfig.withEntitySelectorConfig(entityConfig)
.withValueSelectorConfig(valueConfig);
}

private static EntitySelectorConfig configureEntitySelector(EntitySelectorConfig entitySelectorConfig, Random random) {
private static EntitySelectorConfig configureEntitySelector(EntitySelectorConfig entitySelectorConfig,
RandomGenerator random) {
if (entitySelectorConfig == null) {
entitySelectorConfig = new EntitySelectorConfig();
}
Expand Down Expand Up @@ -65,7 +66,7 @@ private static NearbySelectionConfig configureNearbySelectionWithEntity(String r
}

public static @NonNull SwapMoveSelectorConfig enable(@NonNull SwapMoveSelectorConfig swapMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = swapMoveSelectorConfig.copyConfig();
var entityConfig = configureEntitySelector(nearbyConfig.getEntitySelectorConfig(), random);
var secondaryConfig = nearbyConfig.getSecondaryEntitySelectorConfig();
Expand All @@ -79,7 +80,7 @@ private static NearbySelectionConfig configureNearbySelectionWithEntity(String r

public static @NonNull TailChainSwapMoveSelectorConfig enable(
@NonNull TailChainSwapMoveSelectorConfig tailChainSwapMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = tailChainSwapMoveSelectorConfig.copyConfig();
var entityConfig = configureEntitySelector(nearbyConfig.getEntitySelectorConfig(), random);
var valueConfig = configureValueSelector(nearbyConfig.getValueSelectorConfig(), entityConfig.getId(), distanceMeter);
Expand All @@ -89,7 +90,7 @@ private static NearbySelectionConfig configureNearbySelectionWithEntity(String r

public static @NonNull ListChangeMoveSelectorConfig enable(
@NonNull ListChangeMoveSelectorConfig listChangeMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = listChangeMoveSelectorConfig.copyConfig();
var valueConfig = configureValueSelector(nearbyConfig.getValueSelectorConfig(), random);
var destinationConfig = nearbyConfig.getDestinationSelectorConfig();
Expand Down Expand Up @@ -125,7 +126,7 @@ private static NearbySelectionConfig configureNearbySelectionWithValue(String re
.withDestinationSelectorConfig(destinationConfig);
}

private static ValueSelectorConfig configureValueSelector(ValueSelectorConfig valueSelectorConfig, Random random) {
private static ValueSelectorConfig configureValueSelector(ValueSelectorConfig valueSelectorConfig, RandomGenerator random) {
if (valueSelectorConfig == null) {
valueSelectorConfig = new ValueSelectorConfig();
}
Expand All @@ -135,7 +136,7 @@ private static ValueSelectorConfig configureValueSelector(ValueSelectorConfig va
}

public static @NonNull ListSwapMoveSelectorConfig enable(@NonNull ListSwapMoveSelectorConfig listSwapMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = listSwapMoveSelectorConfig.copyConfig();
var valueConfig = configureValueSelector(nearbyConfig.getValueSelectorConfig(), random);
var secondaryConfig =
Expand All @@ -155,7 +156,7 @@ private static ValueSelectorConfig configureSecondaryValueSelector(ValueSelector
}

public static @NonNull KOptListMoveSelectorConfig enable(@NonNull KOptListMoveSelectorConfig kOptListMoveSelectorConfig,
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull Random random) {
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter, @NonNull RandomGenerator random) {
var nearbyConfig = kOptListMoveSelectorConfig.copyConfig();
var originConfig = configureValueSelector(nearbyConfig.getOriginSelectorConfig(), random);
var valueConfig = configureSecondaryValueSelector(nearbyConfig.getValueSelectorConfig(), originConfig, distanceMeter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElements;
Expand Down Expand Up @@ -187,7 +187,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull UnionMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
UnionMoveSelectorConfig nearbyConfig = copyConfig();
var updatedMoveSelectorList = new LinkedList<MoveSelectorConfig>();
for (var selectorConfig : moveSelectorConfigList) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.timefold.solver.core.config.heuristic.selector.move.generic;

import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
Expand Down Expand Up @@ -94,7 +94,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull ChangeMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElementWrapper;
Expand Down Expand Up @@ -117,7 +117,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull SwapMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.timefold.solver.core.config.heuristic.selector.move.generic.chained;

import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
Expand Down Expand Up @@ -102,7 +102,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull TailChainSwapMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.timefold.solver.core.config.heuristic.selector.move.generic.list;

import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
Expand Down Expand Up @@ -96,7 +96,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull ListChangeMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.timefold.solver.core.config.heuristic.selector.move.generic.list;

import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
Expand Down Expand Up @@ -94,7 +94,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull ListSwapMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.timefold.solver.core.config.heuristic.selector.move.generic.list.kopt;

import java.util.Random;
import java.util.function.Consumer;
import java.util.random.RandomGenerator;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
Expand Down Expand Up @@ -128,7 +128,7 @@ public void visitReferencedClasses(@NonNull Consumer<Class<?>> classVisitor) {
@Override
public @NonNull KOptListMoveSelectorConfig enableNearbySelection(
@NonNull Class<? extends NearbyDistanceMeter<?, ?>> distanceMeter,
@NonNull Random random) {
@NonNull RandomGenerator random) {
return NearbyUtil.enable(this, distanceMeter, random);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.function.Supplier;
import java.util.random.RandomGenerator;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -607,7 +607,7 @@ private static List<Member> getMembers(List<Member> memberList, boolean needMeth
return abbreviate(list, 3);
}

public static String addRandomSuffix(String name, Random random) {
public static String addRandomSuffix(String name, RandomGenerator random) {
var value = new StringBuilder(name);
value.append("-");
random.ints(97, 122) // ['a', 'z']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import java.util.NavigableMap;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Random;
import java.util.TreeMap;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.impl.bavet.common.joiner.JoinerType;
import ai.timefold.solver.core.impl.util.ListEntry;
Expand Down Expand Up @@ -173,11 +173,12 @@ private Iterator<T> iteratorSingleIndexer(Object compositeKey) {
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom) {
return createRandomIterator(queryCompositeKey, workingRandom, null);
}

private Iterator<T> createRandomIterator(Object queryCompositeKey, Random workingRandom, @Nullable Predicate<T> filter) {
private Iterator<T> createRandomIterator(Object queryCompositeKey, RandomGenerator workingRandom,
@Nullable Predicate<T> filter) {
return switch (comparisonMap.size()) {
case 0 -> Collections.emptyIterator();
case 1 -> {
Expand Down Expand Up @@ -206,7 +207,7 @@ yield new RandomIterator(queryCompositeKey,
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom, Predicate<T> filter) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom, Predicate<T> filter) {
return createRandomIterator(queryCompositeKey, workingRandom, filter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Random;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.impl.score.stream.UnfinishedJoiners;
import ai.timefold.solver.core.impl.util.ListEntry;
Expand Down Expand Up @@ -104,11 +104,12 @@ public Iterator<T> iterator(Object queryCompositeKey) {
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom) {
return createRandomIterator(queryCompositeKey, workingRandom, null);
}

private Iterator<T> createRandomIterator(Object queryCompositeKey, Random workingRandom, @Nullable Predicate<T> filter) {
private Iterator<T> createRandomIterator(Object queryCompositeKey, RandomGenerator workingRandom,
@Nullable Predicate<T> filter) {
var indexKeyCollection = queryKeyUnpacker.apply(queryCompositeKey);
if (indexKeyCollection.isEmpty()) {
return Collections.emptyIterator();
Expand All @@ -124,7 +125,7 @@ private Iterator<T> createRandomIterator(Object queryCompositeKey, Random workin
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom, Predicate<T> filter) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom, Predicate<T> filter) {
return createRandomIterator(queryCompositeKey, workingRandom, filter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.random.RandomGenerator;

import ai.timefold.solver.core.impl.score.stream.UnfinishedJoiners;
import ai.timefold.solver.core.impl.util.CompositeListEntry;
Expand Down Expand Up @@ -186,12 +186,12 @@ private Iterator<T> iteratorSingleKey(Object queryCompositeKey, KeyCollection_ i
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom) {
throw new UnsupportedOperationException("Not yet implemented.");
}

@Override
public Iterator<T> randomIterator(Object queryCompositeKey, Random workingRandom, Predicate<T> filter) {
public Iterator<T> randomIterator(Object queryCompositeKey, RandomGenerator workingRandom, Predicate<T> filter) {
throw new UnsupportedOperationException("Not yet implemented.");
}

Expand Down
Loading
Loading