public void addState (String name, double initialWeight, double finalWeight, String[] destinationNames, String[] labelNames, String[][] weightNames) { assert (weightNames.length == destinationNames.length); assert (labelNames.length == destinationNames.length); weightsStructureChanged(); if (name2state.get(name) != null) throw new IllegalArgumentException ("State with name `"+name+"' already exists."); parameters.initialWeights = MatrixOps.append(parameters.initialWeights, initialWeight); parameters.finalWeights = MatrixOps.append(parameters.finalWeights, finalWeight); State s = newState (name, states.size(), initialWeight, finalWeight, destinationNames, labelNames, weightNames, this); s.print (); states.add (s); if (initialWeight > IMPOSSIBLE_WEIGHT) initialStates.add (s); name2state.put (name, s); }