/******************************************************************************* * 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.gibbs; import java.io.PrintStream; import net.jcip.annotations.Immutable; import com.analog.lyric.dimple.model.values.Value; import com.analog.lyric.dimple.model.variables.RealJoint; /** * Event raised when variable sample is changed by Gibbs solver. * <p> * Note that changes to the registration of these events do not go into affect until * then next time initialize is invoked on the variable. * * @since 0.06 * @author Christopher Barber */ @Immutable public class GibbsVariableUpdateEvent extends GibbsSolverVariableEvent { /*------- * State */ private static final long serialVersionUID = 1L; private final Value _oldValue; private final Value _newValue; private final int _rejectCount; /*-------------- * Construction */ GibbsVariableUpdateEvent(ISolverVariableGibbs source, Value oldValue, Value newValue, int rejectCount) { super(source); _oldValue = oldValue.clone(); _newValue = newValue.clone(); _rejectCount = rejectCount; } /*--------------------- * DimpleEvent methods */ @Override protected void printDetails(PrintStream out, int verbosity) { out.format("sample for '%s' set to '%s'", getSourceName(), getNewValue()); if (verbosity > 0) { out.format(" (was %s)", getOldValue()); if (verbosity > 1) { out.format(" [reject count %d]", getRejectCount()); } } } /*---------------------------------- * GibbsVariableUpdateEvent methods */ /** * A copy of the value of the variable prior to Gibbs update. * @since 0.06 */ public Value getOldValue() { return _oldValue; } /** * A copy of the value of the variable after Gibbs update. * @since 0.06 */ public Value getNewValue() { return _newValue; } /** * The number of components of the sample for this variable that were rejected * during the generation of the sample. For single-dimension variables * this will always be either zero or one. And some samplers will never reject. For * {@link RealJoint} variables, this will be a value from zero up to the size of the * joint domain. * <p> * @since 0.06 */ public int getRejectCount() { return _rejectCount; } }