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 baue ein Wachplanungssystem mit Google OR-Tools (CP-SAT) auf. Ich habe eine „Slot-Rotation“-Einschränkung, die sicherstellen soll, dass derselbe Benutzer nicht in aufeinanderfolgenden Schichten...
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...
Ziel dieser Forschung ist es, die Leistungsunterschiede zwischen JIT- (Just-in-Time-Kompilierung) und AOT-Strategien (Ahead-of-Time-Kompilierung) zu untersuchen und ihre jeweiligen Vor- und Nachteile...