Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
*.png
*.jpg
*.jpeg
*.gif
Expand Down
38 changes: 15 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,41 +16,33 @@ The deadline is when all intern slots for summer 2026 are filled. We will review

1. **Fork this repository.**
2. Solve the placement problem using your preferred tools or scripts.
3. Run the test script to evaluate your solution and obtain the overlap and wirelength metrics.
4. Submit a pull request with your updated leaderboard entry and instructions for me to access your actual submission (it's fine if it's public).

3. Run the first 10 tests to evaluate your solution and obtain the overlap and wirelength metrics. Report Average Overlap, Wirelength and total Runtime. *Test cases 11 and 12 are extra credit, give them a shot if you have some time.*
5. Submit a pull request with your updated leaderboard entry and instructions for me to access your actual submission (it's fine if it's public).
Note: You can use any libraries or frameworks you like, but please ensure that your code is well-documented and easy to follow.

Also, if you think there are any bugs in the provided code, feel free to fix them and mention the changes in your submission.

You may submit multiple solutions to try and increase your score.

06
We will review submissions on a rolling basis.

## New Leaderboard (sorted by overlap)

| Rank | Name | Overlap | Wirelength (um) | Runtime (s) | Notes |
|------|-----------------|-------------|-----------------|-------------|----------------------|
| 1 | example | 0.5000 | 0.5 | 10 | example submission |
| 2 | Add Yours! | | | | |



## Leaderboard (sorted by overlap) (OLD; test suite has been updated; see above)
## Leaderboard (sorted by overlap)

| Rank | Name | Overlap | Wirelength (um) | Runtime (s) | Notes |
|------|-----------------|-------------|-----------------|-------------|----------------------|
| 1 | Shashank Shriram | 0.0000 | 0.1310 | 11.32 | 🏎️💥 |
| 2 | Brayden Rudisill | 0.0000 | 0.2611 | 50.51 | Timed on a mac air |
| 3 | manuhalapeth | 0.0000 | 0.2630 | 196.8 | |
| 4 | Neil Teje | 0.0000 | 0.2700 | 24.00s | |
| 5 | Leison Gao | 0.0000 | 0.2796 | 50.14s | |
| 6 | William Pan | 0.0000 | 0.2848 | 155.33s | |
| 7 | Ashmit Dutta | 0.0000 | 0.2870 | 995.58 | Spent my entire morning (12 am - 6 am) doing this :P |
| 8 | Pawan Paleja | 0.0000 | 0.3311 | 1.74s | Implemented hint for loss func, cosine annealing on learning rate with warmup, std annealing on lambda weight. Used optuna to tune hyperparam. Tested on gh codespaces 2-core. |
| 0 | Pratul-Saini | 0.0000 | 0.2537 | 490.06s | Moved some pre-existing computation to GPU. Created some initialization based on connectivity heuristic, added warmup on wirelength, cosine annealing on learning rate. Only ran on first 10 tests for scoring purposes. I separately ran test 11 and placed its results in test-11.txt. Test 12 requires optimization on the problem generation (computing 10^10 overlap values in initial metrics) front seems like as that's where I see hanging. |
| 1 | Brayden Rudisill | 0.0000 | 0.2611 | 50.51 | Timed on a mac air |
| 2 | manuhalapeth | 0.0000 | 0.2630 | 196.8 | |
| 3 | Neil Teje | 0.0000 | 0.2700 | 24.00s | |
| 4 | Leison Gao | 0.0000 | 0.2796 | 50.14s | |
| 5 | William Pan | 0.0000 | 0.2848 | 155.33s | |
| 6 | Ashmit Dutta | 0.0000 | 0.2870 | 995.58 | Spent my entire morning (12 am - 6 am) doing this :P |
| 7 | Pawan Paleja | 0.0000 | 0.3311 | 1.74s | Implemented hint for loss func, cosine annealing on learning rate with warmup, std annealing on lambda weight. Used optuna to tune hyperparam. Tested on gh codespaces 2-core. |
8 | Shashank Shriram | 0.0000 | 0.3312 | 11.32 | 🏎️💥 |
| 9 | Gabriel Del Monte | 0.0000 | 0.3427 | 606.07 | |
| 10 | Aleksey Valouev| 0.0000 | 0.3577 | 118.98 | |
| 11 | Mohul Shukla | 0.0000 | 0.5048 | 54.60s | |
| 11 | Mohul Shukla | 0.0000 | 0.5048 | 54.60s | |
| 12 | Ryan Hulke | 0.0000 | 0.5226 | 166.24 | |
| 13 | Neel Shah | 0.0000 | 0.5445 | 45.40 | Zero overlaps on all tests, adaptive schedule + early stop |
| 14 | Nawel Asgar | 0.0000 | 0.5675 | 81.49 | Adaptive penalty scaling with cubic gradients and design-size optimization
Expand Down
18 changes: 18 additions & 0 deletions constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Configuration constants
# Macro parameters
MIN_MACRO_AREA = 100.0
MAX_MACRO_AREA = 10000.0

# Standard cell parameters (areas can be 1, 2, or 3)
STANDARD_CELL_AREAS = [1.0, 2.0, 3.0]
STANDARD_CELL_HEIGHT = 1.0

# Pin parameters
MIN_STANDARD_CELL_PINS = 3
MAX_STANDARD_CELL_PINS = 6
PIN_SIZE = 0.1 # All pins are 0.1 x 0.1


# Placement parameters
CELL_SPACING = 1e-3 # Small spacing to prevent zero-area cells and ensure legal placement
MAX_ROW_WIDTH = 120.0 # Maximum width of a placement row (for initial spread)
22 changes: 22 additions & 0 deletions data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from enum import IntEnum

# Feature index enums for cleaner code access
class CellFeatureIdx(IntEnum):
"""Indices for cell feature tensor columns."""
AREA = 0
NUM_PINS = 1
X = 2
Y = 3
WIDTH = 4
HEIGHT = 5


class PinFeatureIdx(IntEnum):
"""Indices for pin feature tensor columns."""
CELL_IDX = 0
PIN_X = 1 # Relative to cell corner
PIN_Y = 2 # Relative to cell corner
X = 3 # Absolute position
Y = 4 # Absolute position
WIDTH = 5
HEIGHT = 6
Loading