@operator( value = {"clustering_simple_kmeans"}, content_type = IType.LIST, category = {IOperatorCategory.STATISTICAL}, concept = {IConcept.STATISTIC}) @doc( value = "A list of agent groups clustered by K-Means Algorithm based on the given attributes. Some paremeters can be defined: " + "distance_f: The distance function to use. 4 possible distance functions: euclidean (by default) ; 'chebyshev', 'manhattan' or 'levenshtein'; " + "dont_replace_missing_values: if false, replace missing values globally with mean/mode; max_iterations: the maximum number of iterations to perform;" + "num_clusters: the number of clusters", examples = { @example( value = "clustering_simple_kmeans([ag1, ag2, ag3, ag4, ag5],[\"size\",\"age\", \"weight\"],[\"distance_f\"::\"manhattan\", \"num_clusters\"::3])", equals = "for example, can return [[ag1, ag3], [ag2], [ag4, ag5]]", isExecutable = false) }, see = { "clustering_xmeans", "clustering_em", "clustering_farthestFirst", "clustering_DBScan", "clustering_cobweb" }) public static IList<IList<IAgent>> primClusteringSimpleKMeans( final IScope scope, final IAddressableContainer<Integer, IAgent, Integer, IAgent> agents, final IList<String> attributes, final GamaMap<String, Object> parameters) { SimpleKMeans kmeans = new SimpleKMeans(); kmeans.setSeed(Cast.asInt(scope, scope.getRandom().getSeed())); if (parameters != null) { try { if (parameters.containsKey("distance_f")) { String distanceFct = Cast.asString(scope, parameters.get("distance_f")); if (distanceFct.equals("chebyshev")) { kmeans.setDistanceFunction(new ChebyshevDistance()); } else if (distanceFct.equals("manhattan")) { kmeans.setDistanceFunction(new ManhattanDistance()); } else if (distanceFct.equals("levenshtein")) { kmeans.setDistanceFunction(new EditDistance()); } } if (parameters.containsKey("dont_replace_missing_values")) { kmeans.setDontReplaceMissingValues( Cast.asBool(scope, parameters.get("dont_replace_missing_values"))); } if (parameters.containsKey("max_iterations")) { kmeans.setMaxIterations(Cast.asInt(scope, parameters.get("max_iterations"))); } if (parameters.containsKey("num_clusters")) { kmeans.setNumClusters(Cast.asInt(scope, parameters.get("num_clusters"))); } } catch (Exception e) { } } IList<IList<IAgent>> groupes = clusteringUsingWeka(scope, kmeans, attributes, agents); return groupes; }
public FsmStateStatement(final IDescription desc) { super(desc); setName(getLiteral(IKeyword.NAME)); // A VOIR isInitial = Cast.asBool(null, getLiteral(FsmStateStatement.INITIAL)); isFinal = Cast.asBool(null, getLiteral(FsmStateStatement.FINAL)); }
@Override protected Object privateExecuteIn(final IScope scope) throws GamaRuntimeException { // IGraph data = createData(scope); IGraph g = Cast.asGraph(scope, getFacetValue(scope, IKeyword.GRAPH)); int thread_number = Cast.asInt( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.THREAD_NUMBER, THREAD_NUMBER_DEFAULT)); boolean dissuade_hubs = Cast.asBool( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.DISSUADE_HUBS, DISSUADE_HUBS_DEFAULT)); boolean linlog_mode = Cast.asBool( scope, getFacetValue(scope, GraphForceAtlasLayoutStatement.LINLOG_MODE, LINLOG_MODE_DEFAULT)); boolean prevent_overlap = Cast.asBool( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.PREVENT_OVERLAP, PREVENT_OVERLAP_DEFAULT)); double edge_weight_influence = Cast.asFloat( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.EDGE_WEIGHT_INFLUENCE, EDGE_WEIGHT_INFLUENCE_DEFAULT)); double scaling = Cast.asFloat( scope, getFacetValue(scope, GraphForceAtlasLayoutStatement.SCALING, SCALING_DEFAULT)); boolean stronger_gravity = Cast.asBool( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.STRONGER_GRAVITY, STRONGER_GRAVITY_DEFAULT)); double gravity = Cast.asFloat( scope, getFacetValue(scope, GraphForceAtlasLayoutStatement.GRAVITY, GRAVITY_DEFAULT)); double tolerance = Cast.asFloat( scope, getFacetValue(scope, GraphForceAtlasLayoutStatement.TOLERANCE, TOLERANCE_DEFAULT)); boolean approximate_repulsion = Cast.asBool( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.APPROXIMATE_REPULSION, APPROXIMATE_REPULSION_DEFAULT)); double approximation = Cast.asFloat( scope, getFacetValue( scope, GraphForceAtlasLayoutStatement.APPROXIMATION, APPROXIMATION_DEFAULT)); int nb_steps = Cast.asInt( scope, getFacetValue(scope, GraphForceAtlasLayoutStatement.NB_STEPS, NB_STEPS_DEFAULT)); Object bp1 = getFacetValue(scope, GraphForceAtlasLayoutStatement.BOUNDED_P1, null); Object bp2 = getFacetValue(scope, GraphForceAtlasLayoutStatement.BOUNDED_P2, null); // public static IGraph YifanHuLayout_Step_Unlimited(final IGraph g, double optimal_distance, // double initial_step, double step_ratio, double convergence_threshold, double // barnes_hut_theta) { initializing(); // System.out.println("ForceAtlas2 algorithm (by step), starting."); // System.out.println("converting ..."); IGraph_to_GraphModel(g); // System.out.println("initializing ..."); ForceAtlas2 fa2Layout = new ForceAtlas2(new ForceAtlas2Builder()); initializing_GraphModel(g); fa2Layout.resetPropertiesValues(); fa2Layout.setGraphModel(graph_model); fa2Layout.setOutboundAttractionDistribution(dissuade_hubs); fa2Layout.setLinLogMode(linlog_mode); fa2Layout.setAdjustSizes(prevent_overlap); fa2Layout.setEdgeWeightInfluence(edge_weight_influence); fa2Layout.setScalingRatio(scaling); fa2Layout.setStrongGravityMode(stronger_gravity); fa2Layout.setGravity(gravity); fa2Layout.setJitterTolerance(tolerance); fa2Layout.setBarnesHutOptimize(approximate_repulsion); fa2Layout.setBarnesHutTheta(approximation); // System.out.println("working ..."); fa2Layout.initAlgo(); // System.out.println("working ..."); // int nbsteps=1; // for (int i = 0; i < nbsteps && fa2Layout.canAlgo(); i++){ for (int i = 0; i < nb_steps; i++) { fa2Layout.goAlgo(); } fa2Layout.endAlgo(); // fa2Layout.goAlgo(); // fa2Layout.endAlgo(); if (bp1 != null && bp2 != null) { ILocation p1 = Cast.asPoint(scope, bp1); ILocation p2 = Cast.asPoint(scope, bp2); Update_locations( g, FastMath.min(p1.getX(), p2.getX()), FastMath.min(p1.getY(), p2.getY()), FastMath.max(p1.getX(), p2.getX()), FastMath.max(p1.getY(), p2.getY())); } else { Update_locations(g); } // System.out.println("ended."); return g; }