mirror of
https://github.com/L-yang-yang/cugenopt.git
synced 2026-04-24 12:06:22 +02:00
Initial commit: cuGenOpt GPU optimization solver
This commit is contained in:
commit
fc5a0ff4af
117 changed files with 25545 additions and 0 deletions
83
python/test_cugenopt.py
Normal file
83
python/test_cugenopt.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
"""Quick smoke test for cugenopt Python bindings."""
|
||||
|
||||
import numpy as np
|
||||
import cugenopt
|
||||
|
||||
def test_gpu_info():
|
||||
info = cugenopt.gpu_info()
|
||||
print("GPU: %s" % info.get("name", "N/A"))
|
||||
print(" Compute: %s" % info.get("compute_capability", "N/A"))
|
||||
print(" Memory: %s" % info.get("memory", "N/A"))
|
||||
print(" Driver: %s" % info.get("driver_version", "N/A"))
|
||||
assert info["device_count"] > 0, "No GPU found"
|
||||
|
||||
def test_tsp():
|
||||
n = 20
|
||||
np.random.seed(0)
|
||||
coords = np.random.rand(n, 2).astype(np.float32)
|
||||
dist = np.sqrt(((coords[:, None] - coords[None, :]) ** 2).sum(axis=2))
|
||||
|
||||
result = cugenopt.solve_tsp(dist, max_gen=3000, seed=42, use_aos=True)
|
||||
print(f"\nTSP-{n}: obj={result['objective']:.4f}, "
|
||||
f"time={result['elapsed_ms']:.0f}ms, gens={result['generations']}")
|
||||
route = result["solution"][0]
|
||||
assert len(route) == n
|
||||
assert set(route) == set(range(n)), "Route must be a permutation"
|
||||
|
||||
def test_knapsack():
|
||||
weights = np.array([2, 3, 4, 5, 1, 6, 3, 2], dtype=np.float32)
|
||||
values = np.array([3, 4, 5, 6, 2, 8, 4, 3], dtype=np.float32)
|
||||
result = cugenopt.solve_knapsack(weights, values, capacity=12.0,
|
||||
max_gen=2000, seed=42)
|
||||
print(f"\nKnapsack: obj={result['objective']:.0f}, "
|
||||
f"penalty={result['penalty']:.1f}")
|
||||
|
||||
def test_qap():
|
||||
n = 5
|
||||
flow = np.array([
|
||||
[0, 5, 2, 4, 1],
|
||||
[5, 0, 3, 0, 2],
|
||||
[2, 3, 0, 0, 0],
|
||||
[4, 0, 0, 0, 5],
|
||||
[1, 2, 0, 5, 0],
|
||||
], dtype=np.float32)
|
||||
dist = np.array([
|
||||
[0, 1, 2, 3, 1],
|
||||
[1, 0, 1, 2, 2],
|
||||
[2, 1, 0, 1, 3],
|
||||
[3, 2, 1, 0, 1],
|
||||
[1, 2, 3, 1, 0],
|
||||
], dtype=np.float32)
|
||||
result = cugenopt.solve_qap(flow, dist, max_gen=3000, seed=42)
|
||||
print(f"\nQAP-{n}: obj={result['objective']:.0f}")
|
||||
|
||||
def test_assignment():
|
||||
n = 5
|
||||
cost = np.array([
|
||||
[9, 2, 7, 8, 6],
|
||||
[6, 4, 3, 7, 5],
|
||||
[5, 8, 1, 8, 9],
|
||||
[7, 6, 9, 4, 3],
|
||||
[2, 3, 6, 5, 7],
|
||||
], dtype=np.float32)
|
||||
result = cugenopt.solve_assignment(cost, max_gen=2000, seed=42)
|
||||
print(f"\nAssignment-{n}: obj={result['objective']:.0f}")
|
||||
|
||||
def test_graph_color():
|
||||
n = 10
|
||||
adj = np.zeros((n, n), dtype=np.int32)
|
||||
edges = [(0,1),(0,4),(0,5),(1,2),(1,6),(2,3),(2,7),
|
||||
(3,4),(3,8),(4,9),(5,7),(5,8),(6,8),(6,9),(7,9)]
|
||||
for i, j in edges:
|
||||
adj[i][j] = adj[j][i] = 1
|
||||
result = cugenopt.solve_graph_color(adj, num_colors=3, max_gen=3000, seed=42)
|
||||
print(f"\nGraphColor-{n}: conflicts={result['objective']:.0f}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_gpu_info()
|
||||
test_tsp()
|
||||
test_knapsack()
|
||||
test_qap()
|
||||
test_assignment()
|
||||
test_graph_color()
|
||||
print("\nAll tests passed!")
|
||||
Loading…
Add table
Add a link
Reference in a new issue