import java.util.Random; import java.util.Vector; /** *
* Creates a random flock of robots in an n-dimensional box *
* @author Michael Schuresko * @version %I%, %G% * @since 1.0 */ public class RandomConnectedInitOfAtLeastN implements IInitializer { int m_nNumAgents, m_nDim; int m_nNumAgentsActual; double [] m_arrLfMin; double [] m_arrLfMax; double m_lfConnectRad; double [] m_arrLfIniContState; ILogicVarBundle m_logicVarsToClone; IControlFunc m_controlFuncToClone; Random m_randomGen; boolean m_bVerbose; boolean m_bResetOnContStateRequest; boolean m_bResetOnNumAgentsRequest; /** * constructor specifying number of agents and * dimensionality in which they live. * @param nAgents number of agents * @param nDim dimensionality in which they live */ public RandomConnectedInitOfAtLeastN(int nAgents, int nDim, double lfRad) { m_bResetOnContStateRequest =true; m_bResetOnNumAgentsRequest =true; m_bVerbose = false; m_randomGen = new Random(); m_nNumAgents = nAgents; m_nDim = nDim; m_lfConnectRad = lfRad; m_arrLfMin = new double[nDim]; m_arrLfMax = new double[nDim]; for(int i = 0; i < nDim; ++i) { m_arrLfMin[i] = -0.5; m_arrLfMax[i] = 0.5; } m_logicVarsToClone = new NullLogicVarBundle(); m_controlFuncToClone = new ControlFuncDoNothing(nDim); } /** * constructor specifying number of agents, the * dimensionality in which they live, and the size * of the containing box along each dimension. * @param nAgents number of agents * @param arrLfSizes length, height, width, etc of box * in which agents live-arrLfSizes.length is dimensionality. */ public RandomConnectedInitOfAtLeastN(int nAgents, double [] arrLfSizes, double lfRad) { m_bResetOnContStateRequest =true; m_bResetOnNumAgentsRequest =true; m_bVerbose = false; m_randomGen = new Random(); m_nNumAgents = nAgents; m_lfConnectRad = lfRad; m_nDim = arrLfSizes.length; m_arrLfMin = new double[m_nDim]; m_arrLfMax = new double[m_nDim]; for(int i = 0; i < m_nDim; ++i) { m_arrLfMin[i] = -0.5*arrLfSizes[i]; m_arrLfMax[i] = 0.5*arrLfSizes[i]; } m_logicVarsToClone = new NullLogicVarBundle(); m_controlFuncToClone = new ControlFuncDoNothing(m_nDim); } /** * constructor specifying number of agents, the * dimensionality in which they live, and the size * of the containing box along each dimension. * @param nAgents number of agents * @param arrLfMin min corner of box in which agents live. * @param arrLfMax max corner of box in which agents live. * */ public RandomConnectedInitOfAtLeastN(int nAgents, double [] arrLfMin, double [] arrLfMax, double lfRad) { m_bResetOnContStateRequest =true; m_bResetOnNumAgentsRequest =true; m_bVerbose = false; m_randomGen = new Random(); m_nNumAgents = nAgents; m_lfConnectRad = lfRad; m_nDim = arrLfMin.length; m_arrLfMin = new double[m_nDim]; m_arrLfMax = new double[m_nDim]; for(int i = 0; i < m_nDim; ++i) { m_arrLfMin[i] = arrLfMin[i]; m_arrLfMax[i] = arrLfMax[i]; } m_logicVarsToClone = new NullLogicVarBundle(); m_controlFuncToClone = new ControlFuncDoNothing(m_nDim); } public void setDefaultIniVars(ILogicVarBundle copyMe) { m_logicVarsToClone = copyMe.makeCopy(); } public void setDefaultIniControlFunc(IControlFunc copyMe) { m_controlFuncToClone = copyMe.makeCopy(); } /** * Initial continuous state vector */ public double [] getInitContState() { return m_arrLfIniContState; } public void resetState() { m_arrLfIniContState = createIniContState(); m_nNumAgentsActual = m_arrLfIniContState.length; } double [] createIniContState() { Vector