/******************************************************************************* * 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.solvers.particleBP; import com.analog.lyric.dimple.options.BPOptions; import com.analog.lyric.dimple.solvers.core.proposalKernels.NormalProposalKernel; import com.analog.lyric.dimple.solvers.core.proposalKernels.ProposalKernelOptionKey; import com.analog.lyric.dimple.solvers.interfaces.ISolverNode; import com.analog.lyric.options.BooleanOptionKey; import com.analog.lyric.options.DoubleOptionKey; import com.analog.lyric.options.DoubleRangeOptionKey; import com.analog.lyric.options.IntegerOptionKey; /** * Options for the Particle BP solver. * <p> * Unless otherwise noted, all options take effect upon initialization. * <P> * @since 0.07 * @author Christopher Barber */ public class ParticleBPOptions extends BPOptions { /** * Affects particle BP {@linkplain ParticleBPReal solver variable} objects. * <p> * Is evaluated both when solver variable is constructed and in {@link ISolverNode#initialize}. * <p> * Defaults to 1. * <p> * @since 0.07 */ public static final IntegerOptionKey numParticles = new IntegerOptionKey(ParticleBPOptions.class, "numParticles", 1, 1, Integer.MAX_VALUE); /** * Specifies number of iterations between resampling in particle BP solver. * <p> * Defaults to 1. * <p> * @since 0.07 */ public static final IntegerOptionKey iterationsBetweenResampling = new IntegerOptionKey(ParticleBPOptions.class, "iterationsBetweenResampling", 1, 1, Integer.MAX_VALUE); /** * Affects particle BP {@linkplain ParticleBPReal solver variable} objects. * <p> * @since 0.07 */ public static final IntegerOptionKey resamplingUpdatesPerParticle = new IntegerOptionKey(ParticleBPOptions.class, "resamplingUpdatesPerParticle", 1, 1, Integer.MAX_VALUE); /** * Specifies proposal kernel for real variables in particle BP solver. * <p> * Affects particle BP {@linkplain ParticleBPReal solver variable} objects. * <p> * The proposal kernel instance can be configured by setting options on specific to that * kernel. See documentation for the specific kernel for details. * <p> * Defaults to {@link NormalProposalKernel}. * <p> * @since 0.07 */ public static final ProposalKernelOptionKey proposalKernel = new ProposalKernelOptionKey(ParticleBPOptions.class, "proposalKernel", NormalProposalKernel.class); /** * Specifies the domain of initial particle values for real variables in particle BP solver. * <p> * Affects particle BP {@linkplain ParticleBPReal solver variable} objects. * <p> * The range should be a subset of the variable's domain range. If it is not, then this option is ignored * for that variable. * <p> * Defaults to [-infinity, infinity]. * <p> * @since 0.07 */ public static final DoubleRangeOptionKey initialParticleRange = new DoubleRangeOptionKey(ParticleBPOptions.class, "initialParticleRange"); /** * Enables use of a tempering and annealing process in particle BP solver. * <p> * Defaults to false. * <p> * @since 0.07 */ public static final BooleanOptionKey enableAnnealing = new BooleanOptionKey(ParticleBPOptions.class, "enableAnnealing", false); /** * Specifies the temperature decay rate for annealing in particle BP solver. * <p> * Specifies the rate at which the temperature will be lowered during simulated annealing * in particle BP solver in terms of the number of iterations it will take for the temperature to * be lowered by half. * <p> * @since 0.07 */ public static final DoubleOptionKey annealingHalfLife = new DoubleOptionKey(ParticleBPOptions.class, "annealingHalfLife", 1, 1.0, Double.MAX_VALUE); /** * Specifies the initial temperature for annealing in particle BP solver. * <p> * Defaults to 1.0. * <p> * @since 0.07 */ public static final DoubleOptionKey initialTemperature = new DoubleOptionKey(ParticleBPOptions.class, "initialTemperature", 1.0, 0.0, Double.MAX_VALUE); }