/******************************************************************************* * Copyright 2014 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ********************************************************************************/ package com.analog.lyric.dimple.options; import com.analog.lyric.dimple.schedulers.DefaultScheduler; import com.analog.lyric.dimple.schedulers.SchedulerOptionKey; import com.analog.lyric.dimple.schedulers.validator.AllEdgeScheduleValidator; import com.analog.lyric.dimple.schedulers.validator.ScheduleValidatorOptionKey; import com.analog.lyric.dimple.solvers.core.SNode; import com.analog.lyric.dimple.solvers.optimizedupdate.UpdateApproach; import com.analog.lyric.options.DoubleListOptionKey; import com.analog.lyric.options.DoubleOptionKey; import com.analog.lyric.options.EnumOptionKey; import com.analog.lyric.options.IntegerOptionKey; /** * Common options for belief-propagation based solvers. * <p> * @since 0.07 * @author Christopher Barber */ public class BPOptions extends SolverOptions { /** * Global damping factor * <p> * This option may be set on entire graph or on individual discrete variables or factors. * <p> * Must be a value in the range [0.0, 1.0]. * <p> * A value of 0.0 means that no damping will be performed. * <p> * @since 0.07 */ public static final DoubleOptionKey damping = new DoubleOptionKey(BPOptions.class, "damping", 0.0, 0.0, 1.0); /** * Specifies the number of iterations to perform when solving. * <p> * This should only be set to a value greater than one when the factor graph is not singly connected * (a graph is singly connected if there is only one unique path between any two nodes in the graph). */ public final static IntegerOptionKey iterations = new IntegerOptionKey(BPOptions.class, "iterations", 1); /** * Node specific damping values. * <p> * This option may be set on individual discrete variables or factors. It must either be * an empty list to indicate damping is turned off or to a list of damping values of the * same length as the number of siblings. * <p> * Option is looked up on message creation and when {@linkplain SNode#initialize initialize} * is called. * <p> * @since 0.07 */ public static final DoubleListOptionKey nodeSpecificDamping = new DoubleListOptionKey(BPOptions.class, "nodeSpecificDamping"); /** * Maximum size of discrete belief messages. * <p> * This option may be set on entire graph or on individual discrete factors. * <p> * If less than the full domain size of the message, then messages will be truncated * to this number of dimensions with the lowest weight dimensions omitted. * <p> * Must be a positive number. * <p> * @since 0.07 */ public static final IntegerOptionKey maxMessageSize = new IntegerOptionKey(BPOptions.class, "maxMessageSize", Integer.MAX_VALUE, 1, Integer.MAX_VALUE); /** * Update approach. * <p> * This option may be set on entire graph or on individual discrete factors. * <p> * @since 0.07 */ public static final EnumOptionKey<UpdateApproach> updateApproach = new EnumOptionKey<UpdateApproach>( BPOptions.class, "updateApproach", UpdateApproach.class, UpdateApproach.AUTOMATIC); /** * Execution time scaling factor for weighing execution time and memory allocation costs. * <p> * This option may be set on entire graph or on individual discrete factors. * <p> * Must be a positive number. * <p> * @since 0.07 */ public static final DoubleOptionKey automaticExecutionTimeScalingFactor = new DoubleOptionKey(BPOptions.class, "automaticExecutionTimeScalingFactor", 1.0, 0.0, Double.POSITIVE_INFINITY); /** * Memory allocation scaling factor for weighing execution time and memory allocation costs. * <p> * This option may be set on entire graph or on individual discrete factors. * <p> * Must be a positive number. * <p> * @since 0.07 */ public static final DoubleOptionKey automaticMemoryAllocationScalingFactor = new DoubleOptionKey( BPOptions.class, "automaticMemoryAllocationScalingFactor", 10.0, 0.0, Double.POSITIVE_INFINITY); /** * Density, below which the optimized update algorithm will use a sparse representation for its * auxiliary factor tables. * <p> * This option may be set on entire graph or on individual discrete factors. * <p> * Must be a value in the range [0.0, 1.0]. * <p> * @since 0.07 */ public static final DoubleOptionKey optimizedUpdateSparseThreshold = new DoubleOptionKey(BPOptions.class, "optimizedUpdateSparseThreshold", 1.0, 0.0, 1.0); /** * Specifies schedule validation that should be applied for BP solvers. * <p> * This is used to validate custom schedules. * @since 0.08 */ public static final ScheduleValidatorOptionKey scheduleValidator = new ScheduleValidatorOptionKey(BPOptions.class, "scheduleValidator", AllEdgeScheduleValidator.class); /** * Specifies class of scheduler for generating inference schedule. * <p> * The default scheduler implementation is {@link DefaultScheduler}. * <p> * @since 0.08 */ public static final SchedulerOptionKey scheduler = new SchedulerOptionKey(BPOptions.class, "scheduler", DefaultScheduler.class, scheduleValidator); }