/******************************************************************************* * Copyright 2015 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.interfaces; import org.eclipse.jdt.annotation.Nullable; import com.analog.lyric.dimple.model.core.EdgeState; /** * Solver edge state. * <p> * This interface defines the common interface for solver-specific edge state. Each solver edge should * correspond to a {@link EdgeState} in the corresponding model. Unlike {@link ISolverNode}, * solver edges do not necessarily refer directly to the corresponding model edge object. * <p> * @since 0.08 * @author Christopher Barber * @see EdgeState */ public interface ISolverEdgeState { /** * Returns message from factor to variable ends of the corresponding edge, if one exists. * <p> * The meaning of this message will depend on the solver. For message passing solvers, such * as sum product, it will represent some form of probability distribution of the * edge's variable values conditioned on the graph on the factor's side of the edge. * <p> * @since 0.08 */ public @Nullable Object getFactorToVarMsg(); /** * Returns message from variable to factor ends of the corresponding edge, if one exists. * <p> * The meaning of this message will depend on the solver. For message passing solvers, such * as sum product, it will represent some form of probability distribution of the * edge's variable values conditioned on the graph on the variable's side of the edge.. * <p> * @since 0.08 */ public @Nullable Object getVarToFactorMsg(); /** * Resets edge state to an initial state appropriate for the solver. * <p> * @since 0.08 */ public void reset(); /** * Sets edge state from another edge of the same type. * <p> * @param other must have the same type as this object. * @since 0.08 */ public void setFrom(ISolverEdgeState other); /** * Sets value of message from factor to variable ends of the corresponding edge. * <p> * @param msg the value from which the message will be set. Details will depend on the * specific solver implementation. * @since 0.08 * @throws UnsupportedOperationException if edge does not support this operation. */ public void setFactorToVarMsg(@Nullable Object msg); /** * Sets value of message from variable to factor ends of the corresponding edge. * <p> * @param msg the value from which the message will be set. Details will depend on the * specific solver implementation. * @since 0.08 * @throws UnsupportedOperationException if edge does not support this operation. */ public void setVarToFactorMsg(@Nullable Object msg); }