Относительно вашего первого замечания: поскольку вы связываете каждую сетевую проекцию с конкретным экземпляром EdgeCreator, вы можете потенциально заставить конструктор EdgeCreator принимать тип ссылки, который вы хотите создать в этой сетевой проекции. Это может сделать вещи немного более упорядоченными.
Добавление запрошенного примера здесь:
package jzombies;
import repast.simphony.space.graph.EdgeCreator;
import repast.simphony.space.graph.RepastEdge;
public class CustomEdgeCreator<E extends RepastEdge<T>, T> implements EdgeCreator<E, T> {
private Class<E> e;
public CustomEdgeCreator(Class<E> e) {
this.e = e;
}
@Override
public Class<E> getEdgeType() {
return e;
}
@Override
public E createEdge(T source, T target, boolean isDirected, double weight) {
try {
return e.getDeclaredConstructor(new Class[]{Object.class, Object.class, boolean.class, double.class}).newInstance(source, target, isDirected, weight);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Относительно вашего второго пункта: если вы не добавите созданный край в контекст, он выиграет 'не показывайся как настоящий агент. Таким образом, при создании сетевой ссылки вы можете добавить ее в контекст, и она должна отображаться как в таблице агентов, так и для целей сбора данных.