Ich habe an der Lösung des Mindestproblems des dominierenden Sets mit CP_SAT gearbeitet und es zunächst in Python implementiert. Die Python -Version war sehr schnell, daher habe ich beschlossen, sie in mein Hauptprojekt C ++ einzubeziehen. Wenn ich es jedoch genauso in C ++ modelliert habe, stellte sich heraus, dass es 100 -mal langsamer war. Die tatsächliche Lösung ist langsam. Als C ++ - Version verzweigt sich aus irgendeinem Grund viel. < /P>
Python: < /p>
Ich habe an der Lösung des Mindestproblems des dominierenden Sets mit CP_SAT gearbeitet und es zunächst in Python implementiert. Die Python -Version war sehr schnell, daher habe ich beschlossen, sie in mein Hauptprojekt C ++ einzubeziehen. Wenn ich es jedoch genauso in C ++ modelliert habe, stellte sich heraus, dass es 100 -mal langsamer war. Die tatsächliche Lösung ist langsam. Als C ++ - Version verzweigt sich aus irgendeinem Grund viel. < /P> Python: < /p> [code]# create decision variables. nodes = [model.new_int_var(0, 1, f"node_{i + 1}") for i in range(num_vertices) if (included[i] == 0 and excluded[i] == 0 and removed[i] == 0)]
# create constraints. for i in range(num_vertices): if included[i] == 1 or dominated[i] == 1 or ignored[i] == 1: continue neighbors = adjacencyList[i] undetermined_neighbors = [j for j in neighbors if (included[j] == 0 and excluded[j] == 0 and removed[j] == 0)] if excluded[i] == 0 and removed[i] == 0: model.Add(sum(nodes[translation_pace_to_ilp[j]] for j in undetermined_neighbors) + nodes[translation_pace_to_ilp[i]] >= 1) else: model.Add(sum(nodes[translation_pace_to_ilp[j]] for j in undetermined_neighbors) >= 1)
model.minimize(sum(nodes)) < /code> C ++: < /p> int index = 0; for (int i = 0; i < boost::num_vertices(graph); ++i) { if (mds_context.is_undetermined(newToOldIndex[i])){ decision_vars.push_back(cp_model.NewIntVar(domain).WithName(std::to_string(i))); } //Create constraint. for (int i = 0; i < boost::num_vertices(graph); i++) { if (mds_context.is_dominated(newToOldIndex[i]) || mds_context.is_ignored(newToOldIndex[i])){ continue; } auto [neigh_itt, neigh_itt_end] = boost::adjacent_vertices(i, graph); std::vector undetermined_neighbours; undetermined_neighbours.reserve(std::distance(neigh_itt, neigh_itt_end)); for (auto vertex = neigh_itt ; vertex != neigh_itt_end; ++vertex) { if (mds_context.is_undetermined(newToOldIndex[*vertex])){ undetermined_neighbours.push_back(*vertex); } } LinearExpr sum; if (mds_context.is_excluded(newToOldIndex[i])){ for (int j : undetermined_neighbours) { sum += decision_vars[translation_pace_to_ilp[j]]; } cp_model.AddGreaterOrEqual(sum, 1); } else { for (int j : undetermined_neighbours) { sum += decision_vars[translation_pace_to_ilp[j]]; } sum += decision_vars[translation_pace_to_ilp[i]]; cp_model.AddGreaterOrEqual(sum , 1); }
Ich habe ein kleines Skript erstellt, um herumzuspielen und zu lernen, wie man oder Tools verwendet. /> Lehrer können ihre maximal zugewiesenen wöchentlichen Stunden nicht überschreiten.
Die...
Ich führe eine Gitea -Instanz auf meinem Raspberry Pi 5 mit ARM -Prozessor aus. Ich habe mich mit ähnlichen Fragen befasst, in denen es heißt, -Channel = 3 , verwenden Sie Zitate, um Pakete zu...
Ich führe eine Gitea -Instanz auf meinem Raspberry Pi 5 mit ARM -Prozessor aus. Ich habe mich mit ähnlichen Fragen befasst, in denen es heißt, -Channel = 3 , verwenden Sie Zitate, um Pakete zu...
Ich habe eine Datei, in der ich die Attribute nicht lesen kann, da das Tag anders aussieht als gewöhnlich. Ich habe versucht, LXML wie folgt zu verwenden:
from lxml import etree
Ich habe eine Datei, in der ich die Attribute nicht lesen kann, da das Tag anders aussieht als gewöhnlich. Ich habe versucht, LXML wie folgt zu verwenden:
from lxml import etree