package org.jactr.tools.experiment.actions.jactr;
/*
* default logging
*/
import java.util.Collection;
import java.util.Collections;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.model.IModel;
import org.jactr.tools.experiment.IExperiment;
import org.jactr.tools.experiment.actions.IAction;
import org.jactr.tools.experiment.impl.IVariableContext;
import org.jactr.tools.experiment.impl.VariableResolver;
import org.jactr.tools.experiment.misc.ExperimentUtilities;
import org.jactr.tools.experiment.misc.ModelUtilities;
public class RewardAction implements IAction
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(RewardAction.class);
private String _models;
private String _reward;
private IExperiment _experiment;
public RewardAction(String models, String reward, IExperiment experiment)
{
_experiment = experiment;
_models = models;
_reward = reward;
}
public void fire(IVariableContext context)
{
Collection<IModel> models = null;
if (!_models.equals(""))
models = VariableResolver.getModels(_models,
_experiment.getVariableResolver(), context);
else
{
IModel model = ExperimentUtilities.getExperimentsModel(_experiment);
if (model != null) models = Collections.singleton(model);
}
double reward = getReward(context);
if (models.size() == 0)
LOGGER.error("No clue what models to reward. " + _models
+ " did not resolve to any recognized models.");
for (IModel model : models)
ModelUtilities.reward(model, reward);
}
private double getReward(IVariableContext context)
{
String rewardString = _experiment.getVariableResolver().resolve(_reward,
context).toString();
double reward = Double.NaN;
try
{
reward = Double.parseDouble(rewardString);
}
catch (NumberFormatException nfe)
{
LOGGER.warn(String.format("Could not convert %1$s to number for reward, using NaN",
rewardString));
}
return reward;
}
}