├── .gitignore ├── .vscode └── settings.json ├── Cargo.lock ├── Cargo.toml ├── LICENSE.txt ├── benches └── sa_placer_benchmark.rs ├── output_data ├── final_solution_1.png ├── final_solution_128.png ├── final_solution_16.png ├── final_solution_2.png ├── final_solution_256.png ├── final_solution_32.png ├── final_solution_4.png ├── final_solution_64.png ├── final_solution_8.png ├── fpga_layout.txt ├── fpga_layout_summary.txt ├── fpga_placer_history.csv ├── fpga_placer_history.png ├── fpga_placer_history_1.csv ├── fpga_placer_history_128.csv ├── fpga_placer_history_16.csv ├── fpga_placer_history_2.csv ├── fpga_placer_history_256.csv ├── fpga_placer_history_32.csv ├── fpga_placer_history_4.csv ├── fpga_placer_history_64.csv ├── fpga_placer_history_8.csv └── initial_solution.png └── src ├── fpga_layout.rs ├── lib.rs ├── main.rs ├── netlist.rs └── placer.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.formatOnType": true, 4 | "rust-analyzer.rustfmt.enableRangeFormatting": true, 5 | "[rust]": { 6 | "editor.defaultFormatter": "rust-lang.rust-analyzer", 7 | "editor.formatOnSave": true 8 | }, 9 | "svg.preview.background": "transparent", 10 | } -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ahash" 7 | version = "0.8.9" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" 10 | dependencies = [ 11 | "cfg-if", 12 | "getrandom", 13 | "once_cell", 14 | "version_check", 15 | "zerocopy", 16 | ] 17 | 18 | [[package]] 19 | name = "aho-corasick" 20 | version = "1.1.2" 21 | source = "registry+https://github.com/rust-lang/crates.io-index" 22 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 23 | dependencies = [ 24 | "memchr", 25 | ] 26 | 27 | [[package]] 28 | name = "allocator-api2" 29 | version = "0.2.16" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" 32 | 33 | [[package]] 34 | name = "anes" 35 | version = "0.1.6" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" 38 | 39 | [[package]] 40 | name = "anstyle" 41 | version = "1.0.6" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" 44 | 45 | [[package]] 46 | name = "autocfg" 47 | version = "1.1.0" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 50 | 51 | [[package]] 52 | name = "bitflags" 53 | version = "2.4.2" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" 56 | 57 | [[package]] 58 | name = "bumpalo" 59 | version = "3.15.3" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" 62 | 63 | [[package]] 64 | name = "cast" 65 | version = "0.3.0" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" 68 | 69 | [[package]] 70 | name = "cfg-if" 71 | version = "1.0.0" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 74 | 75 | [[package]] 76 | name = "ciborium" 77 | version = "0.2.2" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" 80 | dependencies = [ 81 | "ciborium-io", 82 | "ciborium-ll", 83 | "serde", 84 | ] 85 | 86 | [[package]] 87 | name = "ciborium-io" 88 | version = "0.2.2" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" 91 | 92 | [[package]] 93 | name = "ciborium-ll" 94 | version = "0.2.2" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 97 | dependencies = [ 98 | "ciborium-io", 99 | "half", 100 | ] 101 | 102 | [[package]] 103 | name = "clap" 104 | version = "4.5.1" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" 107 | dependencies = [ 108 | "clap_builder", 109 | ] 110 | 111 | [[package]] 112 | name = "clap_builder" 113 | version = "4.5.1" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" 116 | dependencies = [ 117 | "anstyle", 118 | "clap_lex", 119 | ] 120 | 121 | [[package]] 122 | name = "clap_lex" 123 | version = "0.7.0" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 126 | 127 | [[package]] 128 | name = "criterion" 129 | version = "0.5.1" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" 132 | dependencies = [ 133 | "anes", 134 | "cast", 135 | "ciborium", 136 | "clap", 137 | "criterion-plot", 138 | "is-terminal", 139 | "itertools 0.10.5", 140 | "num-traits", 141 | "once_cell", 142 | "oorandom", 143 | "plotters", 144 | "rayon", 145 | "regex", 146 | "serde", 147 | "serde_derive", 148 | "serde_json", 149 | "tinytemplate", 150 | "walkdir", 151 | ] 152 | 153 | [[package]] 154 | name = "criterion-plot" 155 | version = "0.5.0" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" 158 | dependencies = [ 159 | "cast", 160 | "itertools 0.10.5", 161 | ] 162 | 163 | [[package]] 164 | name = "crossbeam-deque" 165 | version = "0.8.5" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 168 | dependencies = [ 169 | "crossbeam-epoch", 170 | "crossbeam-utils", 171 | ] 172 | 173 | [[package]] 174 | name = "crossbeam-epoch" 175 | version = "0.9.18" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 178 | dependencies = [ 179 | "crossbeam-utils", 180 | ] 181 | 182 | [[package]] 183 | name = "crossbeam-utils" 184 | version = "0.8.19" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" 187 | 188 | [[package]] 189 | name = "crunchy" 190 | version = "0.2.2" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 193 | 194 | [[package]] 195 | name = "csv" 196 | version = "1.3.0" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" 199 | dependencies = [ 200 | "csv-core", 201 | "itoa", 202 | "ryu", 203 | "serde", 204 | ] 205 | 206 | [[package]] 207 | name = "csv-core" 208 | version = "0.1.11" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" 211 | dependencies = [ 212 | "memchr", 213 | ] 214 | 215 | [[package]] 216 | name = "either" 217 | version = "1.10.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" 220 | 221 | [[package]] 222 | name = "equivalent" 223 | version = "1.0.1" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 226 | 227 | [[package]] 228 | name = "errno" 229 | version = "0.3.8" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" 232 | dependencies = [ 233 | "libc", 234 | "windows-sys", 235 | ] 236 | 237 | [[package]] 238 | name = "fastrand" 239 | version = "2.0.1" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" 242 | 243 | [[package]] 244 | name = "fixedbitset" 245 | version = "0.4.2" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 248 | 249 | [[package]] 250 | name = "getrandom" 251 | version = "0.2.12" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" 254 | dependencies = [ 255 | "cfg-if", 256 | "libc", 257 | "wasi", 258 | ] 259 | 260 | [[package]] 261 | name = "half" 262 | version = "2.3.1" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" 265 | dependencies = [ 266 | "cfg-if", 267 | "crunchy", 268 | ] 269 | 270 | [[package]] 271 | name = "hashbrown" 272 | version = "0.12.3" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 275 | 276 | [[package]] 277 | name = "hashbrown" 278 | version = "0.14.3" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 281 | dependencies = [ 282 | "ahash", 283 | "allocator-api2", 284 | "rayon", 285 | ] 286 | 287 | [[package]] 288 | name = "hermit-abi" 289 | version = "0.3.8" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "379dada1584ad501b383485dd706b8afb7a70fcbc7f4da7d780638a5a6124a60" 292 | 293 | [[package]] 294 | name = "indexmap" 295 | version = "1.9.3" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 298 | dependencies = [ 299 | "autocfg", 300 | "hashbrown 0.12.3", 301 | ] 302 | 303 | [[package]] 304 | name = "indexmap" 305 | version = "2.2.3" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" 308 | dependencies = [ 309 | "equivalent", 310 | "hashbrown 0.14.3", 311 | "rayon", 312 | ] 313 | 314 | [[package]] 315 | name = "is-terminal" 316 | version = "0.4.12" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" 319 | dependencies = [ 320 | "hermit-abi", 321 | "libc", 322 | "windows-sys", 323 | ] 324 | 325 | [[package]] 326 | name = "itertools" 327 | version = "0.10.5" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 330 | dependencies = [ 331 | "either", 332 | ] 333 | 334 | [[package]] 335 | name = "itertools" 336 | version = "0.11.0" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" 339 | dependencies = [ 340 | "either", 341 | ] 342 | 343 | [[package]] 344 | name = "itertools" 345 | version = "0.12.1" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 348 | dependencies = [ 349 | "either", 350 | ] 351 | 352 | [[package]] 353 | name = "itoa" 354 | version = "1.0.10" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 357 | 358 | [[package]] 359 | name = "js-sys" 360 | version = "0.3.68" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" 363 | dependencies = [ 364 | "wasm-bindgen", 365 | ] 366 | 367 | [[package]] 368 | name = "libc" 369 | version = "0.2.153" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" 372 | 373 | [[package]] 374 | name = "linux-raw-sys" 375 | version = "0.4.13" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" 378 | 379 | [[package]] 380 | name = "log" 381 | version = "0.4.20" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 384 | 385 | [[package]] 386 | name = "memchr" 387 | version = "2.7.1" 388 | source = "registry+https://github.com/rust-lang/crates.io-index" 389 | checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 390 | 391 | [[package]] 392 | name = "num-traits" 393 | version = "0.2.18" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" 396 | dependencies = [ 397 | "autocfg", 398 | ] 399 | 400 | [[package]] 401 | name = "once_cell" 402 | version = "1.19.0" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 405 | 406 | [[package]] 407 | name = "oorandom" 408 | version = "11.1.3" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" 411 | 412 | [[package]] 413 | name = "petgraph" 414 | version = "0.6.4" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" 417 | dependencies = [ 418 | "fixedbitset", 419 | "indexmap 2.2.3", 420 | ] 421 | 422 | [[package]] 423 | name = "plotters" 424 | version = "0.3.5" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" 427 | dependencies = [ 428 | "num-traits", 429 | "plotters-backend", 430 | "plotters-svg", 431 | "wasm-bindgen", 432 | "web-sys", 433 | ] 434 | 435 | [[package]] 436 | name = "plotters-backend" 437 | version = "0.3.5" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" 440 | 441 | [[package]] 442 | name = "plotters-svg" 443 | version = "0.3.5" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" 446 | dependencies = [ 447 | "plotters-backend", 448 | ] 449 | 450 | [[package]] 451 | name = "ppv-lite86" 452 | version = "0.2.17" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 455 | 456 | [[package]] 457 | name = "priority-queue" 458 | version = "1.4.0" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "a0bda9164fe05bc9225752d54aae413343c36f684380005398a6a8fde95fe785" 461 | dependencies = [ 462 | "autocfg", 463 | "indexmap 1.9.3", 464 | ] 465 | 466 | [[package]] 467 | name = "proc-macro2" 468 | version = "1.0.78" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" 471 | dependencies = [ 472 | "unicode-ident", 473 | ] 474 | 475 | [[package]] 476 | name = "quote" 477 | version = "1.0.35" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 480 | dependencies = [ 481 | "proc-macro2", 482 | ] 483 | 484 | [[package]] 485 | name = "rand" 486 | version = "0.8.5" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 489 | dependencies = [ 490 | "libc", 491 | "rand_chacha", 492 | "rand_core", 493 | ] 494 | 495 | [[package]] 496 | name = "rand_chacha" 497 | version = "0.3.1" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 500 | dependencies = [ 501 | "ppv-lite86", 502 | "rand_core", 503 | ] 504 | 505 | [[package]] 506 | name = "rand_core" 507 | version = "0.6.4" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 510 | dependencies = [ 511 | "getrandom", 512 | ] 513 | 514 | [[package]] 515 | name = "rand_pcg" 516 | version = "0.3.1" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" 519 | dependencies = [ 520 | "rand_core", 521 | ] 522 | 523 | [[package]] 524 | name = "rayon" 525 | version = "1.8.1" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" 528 | dependencies = [ 529 | "either", 530 | "rayon-core", 531 | ] 532 | 533 | [[package]] 534 | name = "rayon-cond" 535 | version = "0.3.0" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9" 538 | dependencies = [ 539 | "either", 540 | "itertools 0.11.0", 541 | "rayon", 542 | ] 543 | 544 | [[package]] 545 | name = "rayon-core" 546 | version = "1.12.1" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 549 | dependencies = [ 550 | "crossbeam-deque", 551 | "crossbeam-utils", 552 | ] 553 | 554 | [[package]] 555 | name = "regex" 556 | version = "1.10.3" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 559 | dependencies = [ 560 | "aho-corasick", 561 | "memchr", 562 | "regex-automata", 563 | "regex-syntax", 564 | ] 565 | 566 | [[package]] 567 | name = "regex-automata" 568 | version = "0.4.5" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" 571 | dependencies = [ 572 | "aho-corasick", 573 | "memchr", 574 | "regex-syntax", 575 | ] 576 | 577 | [[package]] 578 | name = "regex-syntax" 579 | version = "0.8.2" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 582 | 583 | [[package]] 584 | name = "rustc-hash" 585 | version = "1.1.0" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 588 | 589 | [[package]] 590 | name = "rustix" 591 | version = "0.38.31" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" 594 | dependencies = [ 595 | "bitflags", 596 | "errno", 597 | "libc", 598 | "linux-raw-sys", 599 | "windows-sys", 600 | ] 601 | 602 | [[package]] 603 | name = "rustworkx-core" 604 | version = "0.14.1" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "7dc64577832a6bcfd10fa6d452c3b5fe7a4ca228375d236f65a1ab0db953ba34" 607 | dependencies = [ 608 | "ahash", 609 | "fixedbitset", 610 | "hashbrown 0.14.3", 611 | "indexmap 2.2.3", 612 | "num-traits", 613 | "petgraph", 614 | "priority-queue", 615 | "rand", 616 | "rand_pcg", 617 | "rayon", 618 | "rayon-cond", 619 | ] 620 | 621 | [[package]] 622 | name = "ryu" 623 | version = "1.0.17" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" 626 | 627 | [[package]] 628 | name = "sa-placer" 629 | version = "0.1.0" 630 | dependencies = [ 631 | "criterion", 632 | "csv", 633 | "itertools 0.12.1", 634 | "rand", 635 | "rayon", 636 | "rustc-hash", 637 | "rustworkx-core", 638 | "tempfile", 639 | ] 640 | 641 | [[package]] 642 | name = "same-file" 643 | version = "1.0.6" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 646 | dependencies = [ 647 | "winapi-util", 648 | ] 649 | 650 | [[package]] 651 | name = "serde" 652 | version = "1.0.197" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" 655 | dependencies = [ 656 | "serde_derive", 657 | ] 658 | 659 | [[package]] 660 | name = "serde_derive" 661 | version = "1.0.197" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" 664 | dependencies = [ 665 | "proc-macro2", 666 | "quote", 667 | "syn", 668 | ] 669 | 670 | [[package]] 671 | name = "serde_json" 672 | version = "1.0.114" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" 675 | dependencies = [ 676 | "itoa", 677 | "ryu", 678 | "serde", 679 | ] 680 | 681 | [[package]] 682 | name = "syn" 683 | version = "2.0.50" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" 686 | dependencies = [ 687 | "proc-macro2", 688 | "quote", 689 | "unicode-ident", 690 | ] 691 | 692 | [[package]] 693 | name = "tempfile" 694 | version = "3.10.0" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" 697 | dependencies = [ 698 | "cfg-if", 699 | "fastrand", 700 | "rustix", 701 | "windows-sys", 702 | ] 703 | 704 | [[package]] 705 | name = "tinytemplate" 706 | version = "1.2.1" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" 709 | dependencies = [ 710 | "serde", 711 | "serde_json", 712 | ] 713 | 714 | [[package]] 715 | name = "unicode-ident" 716 | version = "1.0.12" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 719 | 720 | [[package]] 721 | name = "version_check" 722 | version = "0.9.4" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 725 | 726 | [[package]] 727 | name = "walkdir" 728 | version = "2.4.0" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" 731 | dependencies = [ 732 | "same-file", 733 | "winapi-util", 734 | ] 735 | 736 | [[package]] 737 | name = "wasi" 738 | version = "0.11.0+wasi-snapshot-preview1" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 741 | 742 | [[package]] 743 | name = "wasm-bindgen" 744 | version = "0.2.91" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" 747 | dependencies = [ 748 | "cfg-if", 749 | "wasm-bindgen-macro", 750 | ] 751 | 752 | [[package]] 753 | name = "wasm-bindgen-backend" 754 | version = "0.2.91" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" 757 | dependencies = [ 758 | "bumpalo", 759 | "log", 760 | "once_cell", 761 | "proc-macro2", 762 | "quote", 763 | "syn", 764 | "wasm-bindgen-shared", 765 | ] 766 | 767 | [[package]] 768 | name = "wasm-bindgen-macro" 769 | version = "0.2.91" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" 772 | dependencies = [ 773 | "quote", 774 | "wasm-bindgen-macro-support", 775 | ] 776 | 777 | [[package]] 778 | name = "wasm-bindgen-macro-support" 779 | version = "0.2.91" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" 782 | dependencies = [ 783 | "proc-macro2", 784 | "quote", 785 | "syn", 786 | "wasm-bindgen-backend", 787 | "wasm-bindgen-shared", 788 | ] 789 | 790 | [[package]] 791 | name = "wasm-bindgen-shared" 792 | version = "0.2.91" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" 795 | 796 | [[package]] 797 | name = "web-sys" 798 | version = "0.3.68" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" 801 | dependencies = [ 802 | "js-sys", 803 | "wasm-bindgen", 804 | ] 805 | 806 | [[package]] 807 | name = "winapi" 808 | version = "0.3.9" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 811 | dependencies = [ 812 | "winapi-i686-pc-windows-gnu", 813 | "winapi-x86_64-pc-windows-gnu", 814 | ] 815 | 816 | [[package]] 817 | name = "winapi-i686-pc-windows-gnu" 818 | version = "0.4.0" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 821 | 822 | [[package]] 823 | name = "winapi-util" 824 | version = "0.1.6" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" 827 | dependencies = [ 828 | "winapi", 829 | ] 830 | 831 | [[package]] 832 | name = "winapi-x86_64-pc-windows-gnu" 833 | version = "0.4.0" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 836 | 837 | [[package]] 838 | name = "windows-sys" 839 | version = "0.52.0" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 842 | dependencies = [ 843 | "windows-targets", 844 | ] 845 | 846 | [[package]] 847 | name = "windows-targets" 848 | version = "0.52.3" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" 851 | dependencies = [ 852 | "windows_aarch64_gnullvm", 853 | "windows_aarch64_msvc", 854 | "windows_i686_gnu", 855 | "windows_i686_msvc", 856 | "windows_x86_64_gnu", 857 | "windows_x86_64_gnullvm", 858 | "windows_x86_64_msvc", 859 | ] 860 | 861 | [[package]] 862 | name = "windows_aarch64_gnullvm" 863 | version = "0.52.3" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" 866 | 867 | [[package]] 868 | name = "windows_aarch64_msvc" 869 | version = "0.52.3" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" 872 | 873 | [[package]] 874 | name = "windows_i686_gnu" 875 | version = "0.52.3" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" 878 | 879 | [[package]] 880 | name = "windows_i686_msvc" 881 | version = "0.52.3" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" 884 | 885 | [[package]] 886 | name = "windows_x86_64_gnu" 887 | version = "0.52.3" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" 890 | 891 | [[package]] 892 | name = "windows_x86_64_gnullvm" 893 | version = "0.52.3" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" 896 | 897 | [[package]] 898 | name = "windows_x86_64_msvc" 899 | version = "0.52.3" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" 902 | 903 | [[package]] 904 | name = "zerocopy" 905 | version = "0.7.32" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" 908 | dependencies = [ 909 | "zerocopy-derive", 910 | ] 911 | 912 | [[package]] 913 | name = "zerocopy-derive" 914 | version = "0.7.32" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" 917 | dependencies = [ 918 | "proc-macro2", 919 | "quote", 920 | "syn", 921 | ] 922 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "sa-placer" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [lib] 7 | name = "sa_placer_lib" 8 | path = "src/lib.rs" 9 | 10 | [[bin]] 11 | name = "sa_placer" 12 | path = "src/main.rs" 13 | 14 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 15 | 16 | [dependencies] 17 | csv = "1.3.0" 18 | itertools = "0.12.1" 19 | rand = "0.8.5" 20 | rayon = "1.8.0" 21 | rustc-hash = "1.1.0" 22 | rustworkx-core = "0.14.1" 23 | tempfile = "3.8.0" 24 | 25 | 26 | [dev-dependencies] 27 | criterion = "0.5.1" 28 | 29 | [[bench]] 30 | name = "sa_placer_benchmark" 31 | harness = false 32 | -------------------------------------------------------------------------------- /benches/sa_placer_benchmark.rs: -------------------------------------------------------------------------------- 1 | use sa_placer_lib::*; 2 | 3 | use criterion::{black_box, criterion_group, criterion_main, Criterion}; 4 | 5 | fn sa_placer_small_benchmark(c: &mut Criterion) { 6 | // let layout = build_simple_fpga_layout(64, 64); 7 | // let netlist = build_simple_netlist(300, 30, 100); 8 | // let initial_solution = gen_random_placement(layout, netlist); 9 | let layout = black_box(build_simple_fpga_layout(64, 64)); 10 | let netlist: NetlistGraph = black_box(build_simple_netlist(300, 30, 100)); 11 | let initial_solution = black_box(gen_random_placement(&layout, &netlist)); 12 | 13 | c.bench_function("fast_sa_placer_small", |b| { 14 | b.iter(|| fast_sa_placer(initial_solution.clone(), 500, 16, false, false)) 15 | }); 16 | } 17 | 18 | fn sa_placer_large_benchmark(c: &mut Criterion) { 19 | let layout = build_simple_fpga_layout(200, 200); 20 | let netlist = build_simple_netlist(1000, 50, 200); 21 | let initial_solution = black_box(gen_random_placement(&layout, &netlist)); 22 | 23 | c.bench_function("fast_sa_placer_large", |b| { 24 | b.iter(|| { 25 | fast_sa_placer( 26 | black_box(initial_solution.clone()), 27 | black_box(500), 28 | black_box(16), 29 | false, 30 | false, 31 | ) 32 | }) 33 | }); 34 | } 35 | 36 | criterion_group!( 37 | benches, 38 | sa_placer_small_benchmark, 39 | sa_placer_large_benchmark 40 | ); 41 | criterion_main!(benches); 42 | -------------------------------------------------------------------------------- /output_data/final_solution_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_1.png -------------------------------------------------------------------------------- /output_data/final_solution_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_128.png -------------------------------------------------------------------------------- /output_data/final_solution_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_16.png -------------------------------------------------------------------------------- /output_data/final_solution_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_2.png -------------------------------------------------------------------------------- /output_data/final_solution_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_256.png -------------------------------------------------------------------------------- /output_data/final_solution_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_32.png -------------------------------------------------------------------------------- /output_data/final_solution_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_4.png -------------------------------------------------------------------------------- /output_data/final_solution_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_64.png -------------------------------------------------------------------------------- /output_data/final_solution_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/final_solution_8.png -------------------------------------------------------------------------------- /output_data/fpga_layout_summary.txt: -------------------------------------------------------------------------------- 1 | FPGA Layout Summary 2 | Width: 64 3 | Height: 64 4 | CLB Count: 3472 5 | DSP Count: 0 6 | BRAM Count: 372 7 | IO Count: 248 8 | Empty Count: 4 9 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/fpga_placer_history.png -------------------------------------------------------------------------------- /output_data/fpga_placer_history_1.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79196 4 | 2,79174 5 | 3,79152 6 | 4,79093 7 | 5,79093 8 | 6,78850 9 | 7,78850 10 | 8,78722 11 | 9,78706 12 | 10,78706 13 | 11,78542 14 | 12,78476 15 | 13,78476 16 | 14,78454 17 | 15,78454 18 | 16,78384 19 | 17,78368 20 | 18,78114 21 | 19,78022 22 | 20,77924 23 | 21,77924 24 | 22,77554 25 | 23,77344 26 | 24,77318 27 | 25,77209 28 | 26,77209 29 | 27,77126 30 | 28,77126 31 | 29,77126 32 | 30,77111 33 | 31,77111 34 | 32,77109 35 | 33,77049 36 | 34,77042 37 | 35,76966 38 | 36,76966 39 | 37,76902 40 | 38,76777 41 | 39,76777 42 | 40,76697 43 | 41,76695 44 | 42,76619 45 | 43,76619 46 | 44,76443 47 | 45,76443 48 | 46,76261 49 | 47,76087 50 | 48,76087 51 | 49,76087 52 | 50,75953 53 | 51,75789 54 | 52,75789 55 | 53,75645 56 | 54,75471 57 | 55,75471 58 | 56,75471 59 | 57,75427 60 | 58,75281 61 | 59,75281 62 | 60,75281 63 | 61,75281 64 | 62,75256 65 | 63,75256 66 | 64,75056 67 | 65,75056 68 | 66,74970 69 | 67,74912 70 | 68,74902 71 | 69,74902 72 | 70,74902 73 | 71,74713 74 | 72,74673 75 | 73,74673 76 | 74,74657 77 | 75,74657 78 | 76,74637 79 | 77,74511 80 | 78,74249 81 | 79,74249 82 | 80,74249 83 | 81,74245 84 | 82,74147 85 | 83,73940 86 | 84,73940 87 | 85,73874 88 | 86,73874 89 | 87,73454 90 | 88,73416 91 | 89,73416 92 | 90,73344 93 | 91,73344 94 | 92,73344 95 | 93,73344 96 | 94,73344 97 | 95,73305 98 | 96,73252 99 | 97,73252 100 | 98,73252 101 | 99,73252 102 | 100,73204 103 | 101,73040 104 | 102,72986 105 | 103,72936 106 | 104,72933 107 | 105,72929 108 | 106,72784 109 | 107,72784 110 | 108,72718 111 | 109,72718 112 | 110,72446 113 | 111,72430 114 | 112,72146 115 | 113,71982 116 | 114,71982 117 | 115,71743 118 | 116,71743 119 | 117,71691 120 | 118,71691 121 | 119,71480 122 | 120,71116 123 | 121,70904 124 | 122,70904 125 | 123,70696 126 | 124,70670 127 | 125,70670 128 | 126,70513 129 | 127,69991 130 | 128,69931 131 | 129,69931 132 | 130,69931 133 | 131,69839 134 | 132,69839 135 | 133,69713 136 | 134,69663 137 | 135,69663 138 | 136,69663 139 | 137,69663 140 | 138,69613 141 | 139,69576 142 | 140,69498 143 | 141,69498 144 | 142,69498 145 | 143,69463 146 | 144,69393 147 | 145,69380 148 | 146,69310 149 | 147,69310 150 | 148,69310 151 | 149,69010 152 | 150,69010 153 | 151,69010 154 | 152,68848 155 | 153,68848 156 | 154,68848 157 | 155,68734 158 | 156,68396 159 | 157,68088 160 | 158,68088 161 | 159,68051 162 | 160,68051 163 | 161,68013 164 | 162,68013 165 | 163,67892 166 | 164,67764 167 | 165,67672 168 | 166,67476 169 | 167,67198 170 | 168,67198 171 | 169,67198 172 | 170,67186 173 | 171,66955 174 | 172,66755 175 | 173,66755 176 | 174,66733 177 | 175,66733 178 | 176,66601 179 | 177,66399 180 | 178,66399 181 | 179,66399 182 | 180,66399 183 | 181,66399 184 | 182,66214 185 | 183,66214 186 | 184,66192 187 | 185,66150 188 | 186,66134 189 | 187,66084 190 | 188,66059 191 | 189,65988 192 | 190,65988 193 | 191,65988 194 | 192,65988 195 | 193,65988 196 | 194,65988 197 | 195,65986 198 | 196,65936 199 | 197,65892 200 | 198,65830 201 | 199,65742 202 | 200,65742 203 | 201,65742 204 | 202,65742 205 | 203,65603 206 | 204,65594 207 | 205,65545 208 | 206,65443 209 | 207,65422 210 | 208,65190 211 | 209,65190 212 | 210,65190 213 | 211,65094 214 | 212,65094 215 | 213,65094 216 | 214,65094 217 | 215,65094 218 | 216,65032 219 | 217,65032 220 | 218,65032 221 | 219,64800 222 | 220,64800 223 | 221,64800 224 | 222,64588 225 | 223,64286 226 | 224,64286 227 | 225,63990 228 | 226,63940 229 | 227,63940 230 | 228,63940 231 | 229,63880 232 | 230,63780 233 | 231,63780 234 | 232,63780 235 | 233,63774 236 | 234,63774 237 | 235,63774 238 | 236,63774 239 | 237,63774 240 | 238,63774 241 | 239,63653 242 | 240,63577 243 | 241,63577 244 | 242,63577 245 | 243,63530 246 | 244,63530 247 | 245,63530 248 | 246,63530 249 | 247,63530 250 | 248,63528 251 | 249,63484 252 | 250,63484 253 | 251,63484 254 | 252,63382 255 | 253,63308 256 | 254,63308 257 | 255,63308 258 | 256,63308 259 | 257,63142 260 | 258,63142 261 | 259,63142 262 | 260,63108 263 | 261,63023 264 | 262,62993 265 | 263,62993 266 | 264,62848 267 | 265,62848 268 | 266,62848 269 | 267,62848 270 | 268,62758 271 | 269,62758 272 | 270,62680 273 | 271,62668 274 | 272,62610 275 | 273,62610 276 | 274,62610 277 | 275,62606 278 | 276,62548 279 | 277,62528 280 | 278,62517 281 | 279,62517 282 | 280,62517 283 | 281,62467 284 | 282,62442 285 | 283,62442 286 | 284,62442 287 | 285,62442 288 | 286,62442 289 | 287,62442 290 | 288,62106 291 | 289,62032 292 | 290,62032 293 | 291,61938 294 | 292,61872 295 | 293,61792 296 | 294,61792 297 | 295,61678 298 | 296,61560 299 | 297,61494 300 | 298,61494 301 | 299,61489 302 | 300,61489 303 | 301,61489 304 | 302,61461 305 | 303,61461 306 | 304,61353 307 | 305,61313 308 | 306,61313 309 | 307,61313 310 | 308,61206 311 | 309,61116 312 | 310,61116 313 | 311,61116 314 | 312,61046 315 | 313,60946 316 | 314,60946 317 | 315,60946 318 | 316,60946 319 | 317,60946 320 | 318,60922 321 | 319,60917 322 | 320,60895 323 | 321,60893 324 | 322,60893 325 | 323,60584 326 | 324,60584 327 | 325,60584 328 | 326,60564 329 | 327,60564 330 | 328,60405 331 | 329,60393 332 | 330,60274 333 | 331,60248 334 | 332,60052 335 | 333,60052 336 | 334,60052 337 | 335,60052 338 | 336,60052 339 | 337,59842 340 | 338,59842 341 | 339,59842 342 | 340,59842 343 | 341,59842 344 | 342,59842 345 | 343,59842 346 | 344,59842 347 | 345,59842 348 | 346,59511 349 | 347,59492 350 | 348,59492 351 | 349,59492 352 | 350,59492 353 | 351,59176 354 | 352,59176 355 | 353,59176 356 | 354,59176 357 | 355,59176 358 | 356,59020 359 | 357,59020 360 | 358,59020 361 | 359,59020 362 | 360,59020 363 | 361,59020 364 | 362,58672 365 | 363,58672 366 | 364,58672 367 | 365,58672 368 | 366,58672 369 | 367,58672 370 | 368,58628 371 | 369,58530 372 | 370,58530 373 | 371,58530 374 | 372,58522 375 | 373,58522 376 | 374,58522 377 | 375,58522 378 | 376,58522 379 | 377,58522 380 | 378,58522 381 | 379,58522 382 | 380,58522 383 | 381,58250 384 | 382,58250 385 | 383,58250 386 | 384,58078 387 | 385,58014 388 | 386,58014 389 | 387,58014 390 | 388,58014 391 | 389,58014 392 | 390,57946 393 | 391,57946 394 | 392,57946 395 | 393,57946 396 | 394,57946 397 | 395,57946 398 | 396,57946 399 | 397,57849 400 | 398,57849 401 | 399,57849 402 | 400,57849 403 | 401,57849 404 | 402,57709 405 | 403,57709 406 | 404,57561 407 | 405,57561 408 | 406,57561 409 | 407,57554 410 | 408,57554 411 | 409,57540 412 | 410,57540 413 | 411,57540 414 | 412,57449 415 | 413,57326 416 | 414,57250 417 | 415,57250 418 | 416,57240 419 | 417,57155 420 | 418,57155 421 | 419,57155 422 | 420,57047 423 | 421,57018 424 | 422,57018 425 | 423,57018 426 | 424,56976 427 | 425,56976 428 | 426,56916 429 | 427,56916 430 | 428,56904 431 | 429,56904 432 | 430,56786 433 | 431,56786 434 | 432,56786 435 | 433,56786 436 | 434,56786 437 | 435,56581 438 | 436,56429 439 | 437,56385 440 | 438,56385 441 | 439,56385 442 | 440,56385 443 | 441,56105 444 | 442,56099 445 | 443,56031 446 | 444,56031 447 | 445,56019 448 | 446,56019 449 | 447,55989 450 | 448,55945 451 | 449,55945 452 | 450,55945 453 | 451,55945 454 | 452,55945 455 | 453,55945 456 | 454,55799 457 | 455,55799 458 | 456,55799 459 | 457,55799 460 | 458,55751 461 | 459,55751 462 | 460,55751 463 | 461,55711 464 | 462,55711 465 | 463,55711 466 | 464,55628 467 | 465,55616 468 | 466,55616 469 | 467,55524 470 | 468,55524 471 | 469,55524 472 | 470,55408 473 | 471,55358 474 | 472,55358 475 | 473,55358 476 | 474,55334 477 | 475,55334 478 | 476,55334 479 | 477,55164 480 | 478,54982 481 | 479,54982 482 | 480,54977 483 | 481,54927 484 | 482,54927 485 | 483,54927 486 | 484,54895 487 | 485,54895 488 | 486,54893 489 | 487,54893 490 | 488,54893 491 | 489,54597 492 | 490,54597 493 | 491,54597 494 | 492,54349 495 | 493,54349 496 | 494,54349 497 | 495,54349 498 | 496,54349 499 | 497,54051 500 | 498,54051 501 | 499,54051 502 | 500,53871 503 | 501,53871 504 | 502,53871 505 | 503,53871 506 | 504,53871 507 | 505,53683 508 | 506,53683 509 | 507,53683 510 | 508,53327 511 | 509,53327 512 | 510,53327 513 | 511,53121 514 | 512,53121 515 | 513,53121 516 | 514,53121 517 | 515,53121 518 | 516,53121 519 | 517,53115 520 | 518,53102 521 | 519,53080 522 | 520,53080 523 | 521,53080 524 | 522,53032 525 | 523,52950 526 | 524,52950 527 | 525,52772 528 | 526,52772 529 | 527,52772 530 | 528,52751 531 | 529,52751 532 | 530,52751 533 | 531,52751 534 | 532,52751 535 | 533,52751 536 | 534,52749 537 | 535,52749 538 | 536,52749 539 | 537,52705 540 | 538,52705 541 | 539,52705 542 | 540,52651 543 | 541,52651 544 | 542,52651 545 | 543,52651 546 | 544,52651 547 | 545,52651 548 | 546,52651 549 | 547,52651 550 | 548,52647 551 | 549,52647 552 | 550,52647 553 | 551,52647 554 | 552,52647 555 | 553,52647 556 | 554,52437 557 | 555,52437 558 | 556,52425 559 | 557,52425 560 | 558,52421 561 | 559,52421 562 | 560,52421 563 | 561,52241 564 | 562,52229 565 | 563,52201 566 | 564,52121 567 | 565,52121 568 | 566,52121 569 | 567,52121 570 | 568,51970 571 | 569,51898 572 | 570,51898 573 | 571,51898 574 | 572,51898 575 | 573,51726 576 | 574,51424 577 | 575,51248 578 | 576,51248 579 | 577,51248 580 | 578,51248 581 | 579,51233 582 | 580,51201 583 | 581,51201 584 | 582,51201 585 | 583,51201 586 | 584,51201 587 | 585,51101 588 | 586,51101 589 | 587,51101 590 | 588,51101 591 | 589,51101 592 | 590,50893 593 | 591,50893 594 | 592,50893 595 | 593,50893 596 | 594,50893 597 | 595,50893 598 | 596,50893 599 | 597,50893 600 | 598,50893 601 | 599,50893 602 | 600,50893 603 | 601,50893 604 | 602,50893 605 | 603,50893 606 | 604,50893 607 | 605,50893 608 | 606,50893 609 | 607,50893 610 | 608,50893 611 | 609,50893 612 | 610,50893 613 | 611,50893 614 | 612,50893 615 | 613,50873 616 | 614,50868 617 | 615,50864 618 | 616,50856 619 | 617,50856 620 | 618,50856 621 | 619,50856 622 | 620,50856 623 | 621,50856 624 | 622,50704 625 | 623,50640 626 | 624,50624 627 | 625,50624 628 | 626,50624 629 | 627,50624 630 | 628,50624 631 | 629,50616 632 | 630,50616 633 | 631,50616 634 | 632,50616 635 | 633,50522 636 | 634,50493 637 | 635,50493 638 | 636,50421 639 | 637,50421 640 | 638,50421 641 | 639,50104 642 | 640,49748 643 | 641,49748 644 | 642,49710 645 | 643,49538 646 | 644,49490 647 | 645,49490 648 | 646,49490 649 | 647,49252 650 | 648,49252 651 | 649,49252 652 | 650,49252 653 | 651,49150 654 | 652,49150 655 | 653,49054 656 | 654,49054 657 | 655,49054 658 | 656,49054 659 | 657,49046 660 | 658,49046 661 | 659,49046 662 | 660,49046 663 | 661,49012 664 | 662,49012 665 | 663,48985 666 | 664,48985 667 | 665,48985 668 | 666,48985 669 | 667,48985 670 | 668,48985 671 | 669,48985 672 | 670,48985 673 | 671,48985 674 | 672,48985 675 | 673,48985 676 | 674,48688 677 | 675,48520 678 | 676,48520 679 | 677,48520 680 | 678,48520 681 | 679,48520 682 | 680,48520 683 | 681,48520 684 | 682,48520 685 | 683,48520 686 | 684,48520 687 | 685,48061 688 | 686,48061 689 | 687,48061 690 | 688,48061 691 | 689,48061 692 | 690,48061 693 | 691,48049 694 | 692,48049 695 | 693,48049 696 | 694,48049 697 | 695,48037 698 | 696,48037 699 | 697,48037 700 | 698,48037 701 | 699,48017 702 | 700,48017 703 | 701,47954 704 | 702,47954 705 | 703,47954 706 | 704,47954 707 | 705,47954 708 | 706,47700 709 | 707,47444 710 | 708,47444 711 | 709,47335 712 | 710,47335 713 | 711,47331 714 | 712,47331 715 | 713,47331 716 | 714,47331 717 | 715,47331 718 | 716,47287 719 | 717,47287 720 | 718,47287 721 | 719,47287 722 | 720,47287 723 | 721,47287 724 | 722,47275 725 | 723,47275 726 | 724,47275 727 | 725,47275 728 | 726,47275 729 | 727,47275 730 | 728,47275 731 | 729,47275 732 | 730,47275 733 | 731,47275 734 | 732,47275 735 | 733,47275 736 | 734,47142 737 | 735,47108 738 | 736,47108 739 | 737,47108 740 | 738,47038 741 | 739,47038 742 | 740,47038 743 | 741,47038 744 | 742,47038 745 | 743,47038 746 | 744,47038 747 | 745,47038 748 | 746,46969 749 | 747,46969 750 | 748,46903 751 | 749,46903 752 | 750,46903 753 | 751,46781 754 | 752,46781 755 | 753,46781 756 | 754,46556 757 | 755,46530 758 | 756,46530 759 | 757,46530 760 | 758,46515 761 | 759,46515 762 | 760,46515 763 | 761,46415 764 | 762,46415 765 | 763,46415 766 | 764,46415 767 | 765,46415 768 | 766,46415 769 | 767,46415 770 | 768,46415 771 | 769,46407 772 | 770,46407 773 | 771,46264 774 | 772,46130 775 | 773,46130 776 | 774,46130 777 | 775,46130 778 | 776,46130 779 | 777,46112 780 | 778,46112 781 | 779,46112 782 | 780,46020 783 | 781,46020 784 | 782,45870 785 | 783,45870 786 | 784,45870 787 | 785,45870 788 | 786,45870 789 | 787,45870 790 | 788,45848 791 | 789,45848 792 | 790,45739 793 | 791,45739 794 | 792,45739 795 | 793,45739 796 | 794,45739 797 | 795,45708 798 | 796,45708 799 | 797,45708 800 | 798,45708 801 | 799,45510 802 | 800,45510 803 | 801,45510 804 | 802,45510 805 | 803,45486 806 | 804,45486 807 | 805,45486 808 | 806,45486 809 | 807,45486 810 | 808,45486 811 | 809,45486 812 | 810,45486 813 | 811,45486 814 | 812,45476 815 | 813,45476 816 | 814,45472 817 | 815,45472 818 | 816,45470 819 | 817,45470 820 | 818,45470 821 | 819,45454 822 | 820,45454 823 | 821,45410 824 | 822,45410 825 | 823,45404 826 | 824,45404 827 | 825,45318 828 | 826,45307 829 | 827,45307 830 | 828,45307 831 | 829,45307 832 | 830,45285 833 | 831,45285 834 | 832,45285 835 | 833,45285 836 | 834,45285 837 | 835,45285 838 | 836,45285 839 | 837,45285 840 | 838,45222 841 | 839,45222 842 | 840,45222 843 | 841,45222 844 | 842,45213 845 | 843,45213 846 | 844,45213 847 | 845,45213 848 | 846,45213 849 | 847,45047 850 | 848,45047 851 | 849,45047 852 | 850,45037 853 | 851,45037 854 | 852,45037 855 | 853,44873 856 | 854,44873 857 | 855,44873 858 | 856,44873 859 | 857,44873 860 | 858,44873 861 | 859,44873 862 | 860,44873 863 | 861,44695 864 | 862,44695 865 | 863,44695 866 | 864,44660 867 | 865,44656 868 | 866,44656 869 | 867,44656 870 | 868,44656 871 | 869,44656 872 | 870,44656 873 | 871,44656 874 | 872,44656 875 | 873,44656 876 | 874,44656 877 | 875,44644 878 | 876,44638 879 | 877,44638 880 | 878,44638 881 | 879,44638 882 | 880,44638 883 | 881,44558 884 | 882,44558 885 | 883,44558 886 | 884,44558 887 | 885,44558 888 | 886,44558 889 | 887,44558 890 | 888,44558 891 | 889,44447 892 | 890,44447 893 | 891,44447 894 | 892,44433 895 | 893,44433 896 | 894,44433 897 | 895,44433 898 | 896,44433 899 | 897,44291 900 | 898,44291 901 | 899,44291 902 | 900,44291 903 | 901,44276 904 | 902,44252 905 | 903,44252 906 | 904,44252 907 | 905,44252 908 | 906,44252 909 | 907,44252 910 | 908,44252 911 | 909,44252 912 | 910,44243 913 | 911,44243 914 | 912,44243 915 | 913,44243 916 | 914,43965 917 | 915,43963 918 | 916,43957 919 | 917,43957 920 | 918,43869 921 | 919,43869 922 | 920,43813 923 | 921,43789 924 | 922,43701 925 | 923,43701 926 | 924,43701 927 | 925,43701 928 | 926,43701 929 | 927,43701 930 | 928,43701 931 | 929,43701 932 | 930,43701 933 | 931,43673 934 | 932,43629 935 | 933,43582 936 | 934,43582 937 | 935,43522 938 | 936,43522 939 | 937,43522 940 | 938,43522 941 | 939,43484 942 | 940,43484 943 | 941,43444 944 | 942,43444 945 | 943,43444 946 | 944,43440 947 | 945,43440 948 | 946,43440 949 | 947,43440 950 | 948,43440 951 | 949,43440 952 | 950,43440 953 | 951,43440 954 | 952,43440 955 | 953,43440 956 | 954,43440 957 | 955,43428 958 | 956,43394 959 | 957,43394 960 | 958,43394 961 | 959,43394 962 | 960,43394 963 | 961,43244 964 | 962,43244 965 | 963,43244 966 | 964,43225 967 | 965,43225 968 | 966,43225 969 | 967,43225 970 | 968,43225 971 | 969,43141 972 | 970,42985 973 | 971,42856 974 | 972,42856 975 | 973,42856 976 | 974,42856 977 | 975,42793 978 | 976,42793 979 | 977,42793 980 | 978,42793 981 | 979,42793 982 | 980,42793 983 | 981,42789 984 | 982,42568 985 | 983,42568 986 | 984,42568 987 | 985,42568 988 | 986,42568 989 | 987,42568 990 | 988,42568 991 | 989,42568 992 | 990,42568 993 | 991,42550 994 | 992,42386 995 | 993,42380 996 | 994,42380 997 | 995,42380 998 | 996,42380 999 | 997,42380 1000 | 998,42380 1001 | 999,42380 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_128.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79161 4 | 2,78944 5 | 3,78854 6 | 4,78639 7 | 5,78537 8 | 6,78523 9 | 7,78369 10 | 8,78179 11 | 9,77889 12 | 10,77661 13 | 11,77403 14 | 12,77089 15 | 13,77057 16 | 14,76775 17 | 15,76633 18 | 16,76479 19 | 17,76308 20 | 18,75923 21 | 19,75803 22 | 20,75565 23 | 21,75357 24 | 22,75329 25 | 23,75177 26 | 24,75060 27 | 25,74726 28 | 26,74585 29 | 27,74317 30 | 28,74130 31 | 29,74126 32 | 30,74080 33 | 31,73907 34 | 32,73639 35 | 33,73418 36 | 34,73328 37 | 35,72840 38 | 36,72595 39 | 37,72555 40 | 38,72333 41 | 39,72309 42 | 40,72105 43 | 41,72001 44 | 42,71770 45 | 43,71710 46 | 44,71710 47 | 45,71422 48 | 46,71368 49 | 47,71368 50 | 48,71102 51 | 49,70876 52 | 50,70830 53 | 51,70656 54 | 52,70424 55 | 53,70216 56 | 54,70208 57 | 55,70167 58 | 56,70029 59 | 57,69809 60 | 58,69809 61 | 59,69769 62 | 60,69631 63 | 61,69451 64 | 62,69175 65 | 63,69047 66 | 64,69047 67 | 65,68947 68 | 66,68817 69 | 67,68601 70 | 68,68463 71 | 69,68463 72 | 70,68111 73 | 71,68111 74 | 72,67963 75 | 73,67895 76 | 74,67785 77 | 75,67702 78 | 76,67311 79 | 77,67149 80 | 78,67079 81 | 79,67063 82 | 80,67063 83 | 81,66831 84 | 82,66831 85 | 83,66720 86 | 84,66450 87 | 85,66450 88 | 86,66440 89 | 87,66440 90 | 88,66232 91 | 89,66225 92 | 90,66085 93 | 91,65780 94 | 92,65658 95 | 93,65546 96 | 94,65546 97 | 95,65415 98 | 96,65367 99 | 97,65301 100 | 98,64982 101 | 99,64958 102 | 100,64828 103 | 101,64708 104 | 102,64682 105 | 103,64616 106 | 104,64603 107 | 105,64383 108 | 106,64210 109 | 107,64068 110 | 108,63846 111 | 109,63837 112 | 110,63663 113 | 111,63476 114 | 112,63111 115 | 113,62927 116 | 114,62801 117 | 115,62763 118 | 116,62716 119 | 117,62402 120 | 118,62309 121 | 119,61998 122 | 120,61958 123 | 121,61956 124 | 122,61842 125 | 123,61824 126 | 124,61636 127 | 125,61528 128 | 126,61384 129 | 127,61248 130 | 128,60934 131 | 129,60774 132 | 130,60724 133 | 131,60700 134 | 132,60700 135 | 133,60586 136 | 134,60517 137 | 135,60495 138 | 136,60349 139 | 137,60344 140 | 138,60294 141 | 139,60232 142 | 140,60112 143 | 141,60112 144 | 142,59952 145 | 143,59820 146 | 144,59711 147 | 145,59645 148 | 146,59529 149 | 147,59529 150 | 148,59276 151 | 149,59110 152 | 150,59110 153 | 151,58828 154 | 152,58708 155 | 153,58708 156 | 154,58688 157 | 155,58688 158 | 156,58634 159 | 157,58564 160 | 158,58394 161 | 159,58394 162 | 160,58192 163 | 161,58192 164 | 162,57948 165 | 163,57869 166 | 164,57863 167 | 165,57640 168 | 166,57558 169 | 167,57558 170 | 168,57523 171 | 169,57513 172 | 170,57513 173 | 171,57401 174 | 172,57310 175 | 173,57127 176 | 174,56991 177 | 175,56760 178 | 176,56710 179 | 177,56642 180 | 178,56532 181 | 179,56350 182 | 180,56268 183 | 181,56225 184 | 182,56225 185 | 183,56194 186 | 184,56075 187 | 185,56033 188 | 186,55729 189 | 187,55695 190 | 188,55543 191 | 189,55543 192 | 190,55543 193 | 191,55491 194 | 192,55491 195 | 193,55466 196 | 194,55466 197 | 195,55258 198 | 196,55258 199 | 197,55172 200 | 198,55124 201 | 199,55124 202 | 200,54962 203 | 201,54925 204 | 202,54884 205 | 203,54760 206 | 204,54660 207 | 205,54660 208 | 206,54660 209 | 207,54660 210 | 208,54660 211 | 209,54660 212 | 210,54660 213 | 211,54660 214 | 212,54660 215 | 213,54515 216 | 214,54335 217 | 215,54309 218 | 216,54295 219 | 217,54181 220 | 218,54058 221 | 219,53982 222 | 220,53812 223 | 221,53812 224 | 222,53812 225 | 223,53812 226 | 224,53668 227 | 225,53572 228 | 226,53572 229 | 227,53408 230 | 228,53292 231 | 229,53270 232 | 230,53060 233 | 231,52978 234 | 232,52944 235 | 233,52868 236 | 234,52545 237 | 235,52384 238 | 236,52362 239 | 237,52362 240 | 238,52223 241 | 239,52223 242 | 240,52128 243 | 241,51958 244 | 242,51598 245 | 243,51425 246 | 244,51173 247 | 245,51173 248 | 246,51077 249 | 247,51077 250 | 248,50807 251 | 249,50801 252 | 250,50785 253 | 251,50785 254 | 252,50747 255 | 253,50737 256 | 254,50673 257 | 255,50673 258 | 256,50663 259 | 257,50645 260 | 258,50645 261 | 259,50561 262 | 260,50561 263 | 261,50543 264 | 262,50475 265 | 263,50457 266 | 264,50457 267 | 265,50377 268 | 266,50373 269 | 267,50373 270 | 268,50165 271 | 269,50165 272 | 270,49991 273 | 271,49970 274 | 272,49970 275 | 273,49928 276 | 274,49758 277 | 275,49758 278 | 276,49758 279 | 277,49758 280 | 278,49596 281 | 279,49302 282 | 280,49223 283 | 281,49202 284 | 282,49142 285 | 283,48911 286 | 284,48793 287 | 285,48773 288 | 286,48773 289 | 287,48493 290 | 288,48431 291 | 289,48431 292 | 290,48299 293 | 291,48188 294 | 292,48188 295 | 293,48016 296 | 294,48002 297 | 295,47981 298 | 296,47957 299 | 297,47811 300 | 298,47811 301 | 299,47811 302 | 300,47811 303 | 301,47649 304 | 302,47649 305 | 303,47649 306 | 304,47649 307 | 305,47625 308 | 306,47503 309 | 307,47400 310 | 308,47304 311 | 309,47304 312 | 310,47189 313 | 311,47019 314 | 312,46931 315 | 313,46881 316 | 314,46675 317 | 315,46675 318 | 316,46597 319 | 317,46597 320 | 318,46597 321 | 319,46597 322 | 320,46427 323 | 321,46427 324 | 322,46267 325 | 323,46251 326 | 324,46251 327 | 325,46051 328 | 326,46051 329 | 327,45893 330 | 328,45893 331 | 329,45891 332 | 330,45683 333 | 331,45447 334 | 332,45367 335 | 333,45367 336 | 334,45367 337 | 335,45367 338 | 336,45359 339 | 337,45178 340 | 338,45178 341 | 339,45165 342 | 340,45165 343 | 341,45085 344 | 342,45033 345 | 343,45002 346 | 344,44954 347 | 345,44610 348 | 346,44442 349 | 347,44420 350 | 348,44420 351 | 349,44380 352 | 350,44380 353 | 351,44378 354 | 352,44186 355 | 353,44006 356 | 354,44006 357 | 355,44006 358 | 356,43904 359 | 357,43782 360 | 358,43782 361 | 359,43782 362 | 360,43758 363 | 361,43654 364 | 362,43612 365 | 363,43566 366 | 364,43560 367 | 365,43410 368 | 366,43328 369 | 367,43328 370 | 368,43328 371 | 369,43328 372 | 370,43328 373 | 371,43280 374 | 372,43257 375 | 373,43175 376 | 374,43175 377 | 375,43175 378 | 376,43175 379 | 377,43175 380 | 378,43175 381 | 379,43175 382 | 380,43124 383 | 381,42937 384 | 382,42937 385 | 383,42937 386 | 384,42937 387 | 385,42937 388 | 386,42873 389 | 387,42771 390 | 388,42766 391 | 389,42766 392 | 390,42702 393 | 391,42702 394 | 392,42636 395 | 393,42580 396 | 394,42562 397 | 395,42562 398 | 396,42500 399 | 397,42500 400 | 398,42500 401 | 399,42500 402 | 400,42500 403 | 401,42500 404 | 402,42398 405 | 403,42398 406 | 404,42398 407 | 405,42377 408 | 406,42377 409 | 407,42327 410 | 408,42221 411 | 409,42169 412 | 410,41785 413 | 411,41785 414 | 412,41785 415 | 413,41737 416 | 414,41715 417 | 415,41715 418 | 416,41581 419 | 417,41555 420 | 418,41390 421 | 419,41390 422 | 420,41346 423 | 421,41346 424 | 422,41346 425 | 423,41346 426 | 424,41228 427 | 425,41134 428 | 426,41127 429 | 427,41121 430 | 428,41085 431 | 429,41073 432 | 430,41072 433 | 431,41072 434 | 432,41072 435 | 433,41072 436 | 434,40993 437 | 435,40993 438 | 436,40993 439 | 437,40885 440 | 438,40885 441 | 439,40765 442 | 440,40711 443 | 441,40711 444 | 442,40601 445 | 443,40601 446 | 444,40447 447 | 445,40331 448 | 446,40331 449 | 447,40231 450 | 448,40231 451 | 449,40207 452 | 450,40056 453 | 451,40056 454 | 452,40056 455 | 453,40056 456 | 454,40000 457 | 455,40000 458 | 456,40000 459 | 457,39962 460 | 458,39948 461 | 459,39926 462 | 460,39910 463 | 461,39910 464 | 462,39910 465 | 463,39802 466 | 464,39802 467 | 465,39780 468 | 466,39766 469 | 467,39744 470 | 468,39550 471 | 469,39550 472 | 470,39523 473 | 471,39493 474 | 472,39493 475 | 473,39493 476 | 474,39493 477 | 475,39459 478 | 476,39459 479 | 477,39459 480 | 478,39373 481 | 479,39293 482 | 480,39252 483 | 481,39252 484 | 482,39218 485 | 483,39062 486 | 484,39026 487 | 485,39026 488 | 486,39026 489 | 487,39026 490 | 488,38918 491 | 489,38918 492 | 490,38760 493 | 491,38760 494 | 492,38760 495 | 493,38661 496 | 494,38645 497 | 495,38645 498 | 496,38645 499 | 497,38645 500 | 498,38645 501 | 499,38595 502 | 500,38595 503 | 501,38554 504 | 502,38554 505 | 503,38554 506 | 504,38554 507 | 505,38554 508 | 506,38554 509 | 507,38554 510 | 508,38517 511 | 509,38517 512 | 510,38517 513 | 511,38281 514 | 512,38281 515 | 513,38247 516 | 514,38247 517 | 515,38241 518 | 516,38160 519 | 517,38160 520 | 518,38030 521 | 519,38030 522 | 520,38030 523 | 521,37936 524 | 522,37936 525 | 523,37748 526 | 524,37748 527 | 525,37748 528 | 526,37748 529 | 527,37748 530 | 528,37394 531 | 529,37394 532 | 530,37394 533 | 531,37394 534 | 532,37394 535 | 533,37334 536 | 534,37334 537 | 535,37334 538 | 536,37334 539 | 537,37276 540 | 538,37236 541 | 539,37236 542 | 540,37216 543 | 541,37216 544 | 542,37216 545 | 543,36984 546 | 544,36732 547 | 545,36732 548 | 546,36732 549 | 547,36712 550 | 548,36712 551 | 549,36712 552 | 550,36706 553 | 551,36706 554 | 552,36706 555 | 553,36676 556 | 554,36676 557 | 555,36676 558 | 556,36676 559 | 557,36648 560 | 558,36563 561 | 559,36563 562 | 560,36529 563 | 561,36307 564 | 562,36306 565 | 563,36186 566 | 564,36095 567 | 565,36090 568 | 566,36090 569 | 567,35992 570 | 568,35992 571 | 569,35992 572 | 570,35992 573 | 571,35984 574 | 572,35976 575 | 573,35976 576 | 574,35976 577 | 575,35976 578 | 576,35976 579 | 577,35956 580 | 578,35956 581 | 579,35956 582 | 580,35868 583 | 581,35868 584 | 582,35792 585 | 583,35792 586 | 584,35792 587 | 585,35758 588 | 586,35758 589 | 587,35758 590 | 588,35581 591 | 589,35487 592 | 590,35487 593 | 591,35487 594 | 592,35451 595 | 593,35425 596 | 594,35425 597 | 595,35425 598 | 596,35333 599 | 597,35318 600 | 598,35318 601 | 599,35272 602 | 600,35272 603 | 601,35272 604 | 602,35262 605 | 603,35261 606 | 604,35261 607 | 605,35261 608 | 606,35250 609 | 607,35250 610 | 608,35247 611 | 609,35247 612 | 610,35247 613 | 611,35247 614 | 612,35247 615 | 613,35187 616 | 614,35187 617 | 615,35187 618 | 616,35165 619 | 617,35165 620 | 618,35165 621 | 619,35165 622 | 620,35165 623 | 621,35047 624 | 622,35047 625 | 623,35042 626 | 624,35030 627 | 625,35018 628 | 626,35006 629 | 627,34864 630 | 628,34864 631 | 629,34714 632 | 630,34714 633 | 631,34714 634 | 632,34714 635 | 633,34714 636 | 634,34713 637 | 635,34695 638 | 636,34611 639 | 637,34611 640 | 638,34611 641 | 639,34611 642 | 640,34611 643 | 641,34573 644 | 642,34505 645 | 643,34505 646 | 644,34505 647 | 645,34505 648 | 646,34505 649 | 647,34413 650 | 648,34413 651 | 649,34413 652 | 650,34413 653 | 651,34413 654 | 652,34413 655 | 653,34413 656 | 654,34339 657 | 655,34329 658 | 656,34329 659 | 657,34329 660 | 658,34303 661 | 659,34303 662 | 660,34303 663 | 661,34303 664 | 662,34293 665 | 663,34189 666 | 664,34189 667 | 665,34189 668 | 666,34146 669 | 667,34141 670 | 668,34123 671 | 669,34123 672 | 670,34123 673 | 671,34123 674 | 672,34123 675 | 673,34123 676 | 674,34050 677 | 675,34050 678 | 676,34042 679 | 677,33868 680 | 678,33868 681 | 679,33821 682 | 680,33781 683 | 681,33762 684 | 682,33697 685 | 683,33697 686 | 684,33697 687 | 685,33697 688 | 686,33653 689 | 687,33653 690 | 688,33497 691 | 689,33483 692 | 690,33483 693 | 691,33483 694 | 692,33483 695 | 693,33483 696 | 694,33483 697 | 695,33483 698 | 696,33483 699 | 697,33483 700 | 698,33475 701 | 699,33443 702 | 700,33443 703 | 701,33416 704 | 702,33416 705 | 703,33416 706 | 704,33416 707 | 705,33345 708 | 706,33333 709 | 707,33333 710 | 708,33333 711 | 709,33333 712 | 710,33333 713 | 711,33301 714 | 712,33289 715 | 713,33289 716 | 714,33005 717 | 715,32735 718 | 716,32731 719 | 717,32731 720 | 718,32731 721 | 719,32731 722 | 720,32731 723 | 721,32731 724 | 722,32731 725 | 723,32731 726 | 724,32731 727 | 725,32731 728 | 726,32731 729 | 727,32731 730 | 728,32731 731 | 729,32729 732 | 730,32727 733 | 731,32713 734 | 732,32713 735 | 733,32713 736 | 734,32713 737 | 735,32689 738 | 736,32689 739 | 737,32689 740 | 738,32658 741 | 739,32658 742 | 740,32658 743 | 741,32655 744 | 742,32655 745 | 743,32655 746 | 744,32642 747 | 745,32642 748 | 746,32642 749 | 747,32585 750 | 748,32563 751 | 749,32563 752 | 750,32537 753 | 751,32455 754 | 752,32455 755 | 753,32455 756 | 754,32455 757 | 755,32453 758 | 756,32439 759 | 757,32439 760 | 758,32439 761 | 759,32408 762 | 760,32408 763 | 761,32408 764 | 762,32382 765 | 763,32327 766 | 764,32327 767 | 765,32189 768 | 766,32189 769 | 767,32189 770 | 768,32171 771 | 769,32171 772 | 770,32171 773 | 771,32171 774 | 772,32171 775 | 773,32171 776 | 774,32171 777 | 775,32171 778 | 776,32171 779 | 777,32096 780 | 778,32096 781 | 779,32096 782 | 780,32096 783 | 781,32094 784 | 782,32094 785 | 783,32094 786 | 784,32081 787 | 785,32081 788 | 786,32065 789 | 787,32053 790 | 788,32053 791 | 789,31998 792 | 790,31948 793 | 791,31948 794 | 792,31948 795 | 793,31948 796 | 794,31928 797 | 795,31928 798 | 796,31928 799 | 797,31928 800 | 798,31918 801 | 799,31918 802 | 800,31918 803 | 801,31918 804 | 802,31918 805 | 803,31918 806 | 804,31880 807 | 805,31880 808 | 806,31880 809 | 807,31880 810 | 808,31874 811 | 809,31868 812 | 810,31848 813 | 811,31848 814 | 812,31848 815 | 813,31848 816 | 814,31848 817 | 815,31848 818 | 816,31848 819 | 817,31848 820 | 818,31848 821 | 819,31848 822 | 820,31804 823 | 821,31803 824 | 822,31803 825 | 823,31803 826 | 824,31803 827 | 825,31803 828 | 826,31669 829 | 827,31635 830 | 828,31635 831 | 829,31635 832 | 830,31590 833 | 831,31590 834 | 832,31590 835 | 833,31590 836 | 834,31590 837 | 835,31560 838 | 836,31560 839 | 837,31538 840 | 838,31454 841 | 839,31436 842 | 840,31436 843 | 841,31430 844 | 842,31430 845 | 843,31380 846 | 844,31380 847 | 845,31356 848 | 846,31356 849 | 847,31334 850 | 848,31334 851 | 849,31334 852 | 850,31334 853 | 851,31334 854 | 852,31280 855 | 853,31202 856 | 854,31202 857 | 855,31160 858 | 856,31160 859 | 857,31160 860 | 858,31077 861 | 859,31077 862 | 860,31077 863 | 861,31077 864 | 862,31077 865 | 863,31077 866 | 864,31077 867 | 865,30959 868 | 866,30887 869 | 867,30887 870 | 868,30887 871 | 869,30887 872 | 870,30887 873 | 871,30887 874 | 872,30887 875 | 873,30887 876 | 874,30887 877 | 875,30887 878 | 876,30887 879 | 877,30887 880 | 878,30887 881 | 879,30887 882 | 880,30886 883 | 881,30886 884 | 882,30886 885 | 883,30886 886 | 884,30886 887 | 885,30883 888 | 886,30881 889 | 887,30875 890 | 888,30819 891 | 889,30819 892 | 890,30819 893 | 891,30809 894 | 892,30809 895 | 893,30809 896 | 894,30809 897 | 895,30809 898 | 896,30809 899 | 897,30763 900 | 898,30763 901 | 899,30763 902 | 900,30763 903 | 901,30763 904 | 902,30727 905 | 903,30721 906 | 904,30649 907 | 905,30649 908 | 906,30641 909 | 907,30615 910 | 908,30615 911 | 909,30615 912 | 910,30615 913 | 911,30554 914 | 912,30522 915 | 913,30500 916 | 914,30500 917 | 915,30500 918 | 916,30493 919 | 917,30493 920 | 918,30493 921 | 919,30493 922 | 920,30493 923 | 921,30493 924 | 922,30487 925 | 923,30487 926 | 924,30475 927 | 925,30475 928 | 926,30475 929 | 927,30475 930 | 928,30446 931 | 929,30428 932 | 930,30428 933 | 931,30428 934 | 932,30366 935 | 933,30366 936 | 934,30338 937 | 935,30338 938 | 936,30338 939 | 937,30338 940 | 938,30338 941 | 939,30338 942 | 940,30240 943 | 941,30152 944 | 942,30152 945 | 943,30152 946 | 944,30073 947 | 945,30073 948 | 946,29909 949 | 947,29909 950 | 948,29909 951 | 949,29909 952 | 950,29909 953 | 951,29895 954 | 952,29895 955 | 953,29895 956 | 954,29895 957 | 955,29895 958 | 956,29821 959 | 957,29821 960 | 958,29821 961 | 959,29803 962 | 960,29789 963 | 961,29789 964 | 962,29789 965 | 963,29789 966 | 964,29789 967 | 965,29789 968 | 966,29789 969 | 967,29663 970 | 968,29663 971 | 969,29641 972 | 970,29641 973 | 971,29641 974 | 972,29641 975 | 973,29641 976 | 974,29641 977 | 975,29641 978 | 976,29641 979 | 977,29641 980 | 978,29635 981 | 979,29635 982 | 980,29635 983 | 981,29635 984 | 982,29635 985 | 983,29635 986 | 984,29625 987 | 985,29625 988 | 986,29585 989 | 987,29515 990 | 988,29515 991 | 989,29515 992 | 990,29515 993 | 991,29515 994 | 992,29515 995 | 993,29515 996 | 994,29504 997 | 995,29504 998 | 996,29504 999 | 997,29504 1000 | 998,29504 1001 | 999,29483 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_16.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79168 4 | 2,79048 5 | 3,78868 6 | 4,78626 7 | 5,78494 8 | 6,78273 9 | 7,78131 10 | 8,77973 11 | 9,77889 12 | 10,77684 13 | 11,77301 14 | 12,76911 15 | 13,76911 16 | 14,76647 17 | 15,76535 18 | 16,76393 19 | 17,75961 20 | 18,75785 21 | 19,75596 22 | 20,75320 23 | 21,74858 24 | 22,74592 25 | 23,74471 26 | 24,74380 27 | 25,74160 28 | 26,74056 29 | 27,74035 30 | 28,73849 31 | 29,73799 32 | 30,73567 33 | 31,73561 34 | 32,73359 35 | 33,73162 36 | 34,73084 37 | 35,72888 38 | 36,72804 39 | 37,72804 40 | 38,72566 41 | 39,72472 42 | 40,72440 43 | 41,72368 44 | 42,72302 45 | 43,72062 46 | 44,71786 47 | 45,71582 48 | 46,71427 49 | 47,71410 50 | 48,71246 51 | 49,71028 52 | 50,71024 53 | 51,70878 54 | 52,70660 55 | 53,70594 56 | 54,70490 57 | 55,70114 58 | 56,69900 59 | 57,69468 60 | 58,69050 61 | 59,69002 62 | 60,68774 63 | 61,68734 64 | 62,68713 65 | 63,68493 66 | 64,68383 67 | 65,68225 68 | 66,68065 69 | 67,68039 70 | 68,68030 71 | 69,67722 72 | 70,67532 73 | 71,67355 74 | 72,67291 75 | 73,67106 76 | 74,66948 77 | 75,66906 78 | 76,66906 79 | 77,66886 80 | 78,66886 81 | 79,66786 82 | 80,66560 83 | 81,66417 84 | 82,66111 85 | 83,66111 86 | 84,66111 87 | 85,66025 88 | 86,66004 89 | 87,65932 90 | 88,65932 91 | 89,65812 92 | 90,65718 93 | 91,65714 94 | 92,65572 95 | 93,65480 96 | 94,65270 97 | 95,65164 98 | 96,65150 99 | 97,65030 100 | 98,64892 101 | 99,64652 102 | 100,64567 103 | 101,64467 104 | 102,64335 105 | 103,64073 106 | 104,64031 107 | 105,63851 108 | 106,63721 109 | 107,63537 110 | 108,63313 111 | 109,63229 112 | 110,63030 113 | 111,62936 114 | 112,62704 115 | 113,62556 116 | 114,62393 117 | 115,62127 118 | 116,61955 119 | 117,61907 120 | 118,61786 121 | 119,61671 122 | 120,61413 123 | 121,61233 124 | 122,61152 125 | 123,61099 126 | 124,60969 127 | 125,60671 128 | 126,60660 129 | 127,60630 130 | 128,60416 131 | 129,60300 132 | 130,60262 133 | 131,60188 134 | 132,59863 135 | 133,59568 136 | 134,59539 137 | 135,59467 138 | 136,59457 139 | 137,59457 140 | 138,59303 141 | 139,59135 142 | 140,58818 143 | 141,58710 144 | 142,58695 145 | 143,58484 146 | 144,58467 147 | 145,58337 148 | 146,58291 149 | 147,58087 150 | 148,58029 151 | 149,57779 152 | 150,57735 153 | 151,57601 154 | 152,57535 155 | 153,57361 156 | 154,57297 157 | 155,57297 158 | 156,57005 159 | 157,56766 160 | 158,56652 161 | 159,56534 162 | 160,56534 163 | 161,56401 164 | 162,56401 165 | 163,56365 166 | 164,56219 167 | 165,56131 168 | 166,55945 169 | 167,55804 170 | 168,55614 171 | 169,55485 172 | 170,55325 173 | 171,55293 174 | 172,55215 175 | 173,55193 176 | 174,55193 177 | 175,55131 178 | 176,54967 179 | 177,54953 180 | 178,54795 181 | 179,54795 182 | 180,54725 183 | 181,54643 184 | 182,54555 185 | 183,54516 186 | 184,54476 187 | 185,54362 188 | 186,54160 189 | 187,54160 190 | 188,54058 191 | 189,54028 192 | 190,54028 193 | 191,53955 194 | 192,53933 195 | 193,53775 196 | 194,53472 197 | 195,53472 198 | 196,53429 199 | 197,53067 200 | 198,53027 201 | 199,52949 202 | 200,52929 203 | 201,52929 204 | 202,52929 205 | 203,52929 206 | 204,52866 207 | 205,52681 208 | 206,52613 209 | 207,52613 210 | 208,52613 211 | 209,52613 212 | 210,52612 213 | 211,52466 214 | 212,52382 215 | 213,52382 216 | 214,52382 217 | 215,52346 218 | 216,52346 219 | 217,52257 220 | 218,51945 221 | 219,51945 222 | 220,51929 223 | 221,51711 224 | 222,51697 225 | 223,51668 226 | 224,51654 227 | 225,51632 228 | 226,51562 229 | 227,51562 230 | 228,51514 231 | 229,51514 232 | 230,51486 233 | 231,51402 234 | 232,51092 235 | 233,51042 236 | 234,51018 237 | 235,51018 238 | 236,50950 239 | 237,50823 240 | 238,50801 241 | 239,50739 242 | 240,50695 243 | 241,50695 244 | 242,50695 245 | 243,50389 246 | 244,50389 247 | 245,50289 248 | 246,50289 249 | 247,49959 250 | 248,49895 251 | 249,49895 252 | 250,49769 253 | 251,49689 254 | 252,49689 255 | 253,49689 256 | 254,49689 257 | 255,49653 258 | 256,49628 259 | 257,49628 260 | 258,49436 261 | 259,49340 262 | 260,49340 263 | 261,49315 264 | 262,49267 265 | 263,49255 266 | 264,49255 267 | 265,49255 268 | 266,49055 269 | 267,49037 270 | 268,48835 271 | 269,48817 272 | 270,48803 273 | 271,48803 274 | 272,48803 275 | 273,48607 276 | 274,48429 277 | 275,48429 278 | 276,48429 279 | 277,48326 280 | 278,48326 281 | 279,48326 282 | 280,48249 283 | 281,48249 284 | 282,48249 285 | 283,48249 286 | 284,48061 287 | 285,47955 288 | 286,47781 289 | 287,47657 290 | 288,47645 291 | 289,47541 292 | 290,47513 293 | 291,47304 294 | 292,47176 295 | 293,47176 296 | 294,47172 297 | 295,47172 298 | 296,47172 299 | 297,47034 300 | 298,46984 301 | 299,46984 302 | 300,46897 303 | 301,46897 304 | 302,46897 305 | 303,46897 306 | 304,46897 307 | 305,46749 308 | 306,46651 309 | 307,46651 310 | 308,46603 311 | 309,46603 312 | 310,46503 313 | 311,46491 314 | 312,46491 315 | 313,46491 316 | 314,46401 317 | 315,46401 318 | 316,46387 319 | 317,46383 320 | 318,46383 321 | 319,46383 322 | 320,46301 323 | 321,46301 324 | 322,46301 325 | 323,46301 326 | 324,46193 327 | 325,46087 328 | 326,45961 329 | 327,45925 330 | 328,45896 331 | 329,45822 332 | 330,45612 333 | 331,45598 334 | 332,45598 335 | 333,45532 336 | 334,45507 337 | 335,45507 338 | 336,45507 339 | 337,45507 340 | 338,45505 341 | 339,45505 342 | 340,45305 343 | 341,45254 344 | 342,45254 345 | 343,45092 346 | 344,44991 347 | 345,44887 348 | 346,44699 349 | 347,44699 350 | 348,44637 351 | 349,44637 352 | 350,44637 353 | 351,44569 354 | 352,44569 355 | 353,44445 356 | 354,44445 357 | 355,44427 358 | 356,44415 359 | 357,44415 360 | 358,44253 361 | 359,44090 362 | 360,44090 363 | 361,44090 364 | 362,43903 365 | 363,43803 366 | 364,43710 367 | 365,43678 368 | 366,43472 369 | 367,43396 370 | 368,43388 371 | 369,43388 372 | 370,43388 373 | 371,43374 374 | 372,43374 375 | 373,43374 376 | 374,43374 377 | 375,43346 378 | 376,43284 379 | 377,43114 380 | 378,43114 381 | 379,43100 382 | 380,42930 383 | 381,42930 384 | 382,42812 385 | 383,42812 386 | 384,42812 387 | 385,42790 388 | 386,42620 389 | 387,42550 390 | 388,42300 391 | 389,42192 392 | 390,42192 393 | 391,42038 394 | 392,42038 395 | 393,41824 396 | 394,41824 397 | 395,41808 398 | 396,41690 399 | 397,41690 400 | 398,41690 401 | 399,41690 402 | 400,41690 403 | 401,41690 404 | 402,41690 405 | 403,41690 406 | 404,41690 407 | 405,41690 408 | 406,41690 409 | 407,41690 410 | 408,41633 411 | 409,41633 412 | 410,41519 413 | 411,41511 414 | 412,41511 415 | 413,41464 416 | 414,41441 417 | 415,41441 418 | 416,41441 419 | 417,41441 420 | 418,41436 421 | 419,41436 422 | 420,41436 423 | 421,41422 424 | 422,41422 425 | 423,41367 426 | 424,41367 427 | 425,41367 428 | 426,41359 429 | 427,41359 430 | 428,41359 431 | 429,41359 432 | 430,41317 433 | 431,41317 434 | 432,41317 435 | 433,41249 436 | 434,41167 437 | 435,41123 438 | 436,41111 439 | 437,41108 440 | 438,41082 441 | 439,41082 442 | 440,40980 443 | 441,40897 444 | 442,40897 445 | 443,40781 446 | 444,40781 447 | 445,40781 448 | 446,40781 449 | 447,40781 450 | 448,40727 451 | 449,40727 452 | 450,40695 453 | 451,40589 454 | 452,40391 455 | 453,40043 456 | 454,39876 457 | 455,39876 458 | 456,39862 459 | 457,39708 460 | 458,39706 461 | 459,39706 462 | 460,39706 463 | 461,39690 464 | 462,39649 465 | 463,39649 466 | 464,39646 467 | 465,39646 468 | 466,39446 469 | 467,39446 470 | 468,39446 471 | 469,39422 472 | 470,39422 473 | 471,39422 474 | 472,39422 475 | 473,39313 476 | 474,39306 477 | 475,39306 478 | 476,39270 479 | 477,39270 480 | 478,39250 481 | 479,39225 482 | 480,39225 483 | 481,39215 484 | 482,39215 485 | 483,39185 486 | 484,39165 487 | 485,39165 488 | 486,39155 489 | 487,39155 490 | 488,38999 491 | 489,38999 492 | 490,38999 493 | 491,38940 494 | 492,38894 495 | 493,38826 496 | 494,38638 497 | 495,38638 498 | 496,38638 499 | 497,38638 500 | 498,38566 501 | 499,38566 502 | 500,38566 503 | 501,38554 504 | 502,38536 505 | 503,38508 506 | 504,38439 507 | 505,38438 508 | 506,38438 509 | 507,38438 510 | 508,38438 511 | 509,38289 512 | 510,38283 513 | 511,37983 514 | 512,37983 515 | 513,37954 516 | 514,37925 517 | 515,37925 518 | 516,37812 519 | 517,37812 520 | 518,37812 521 | 519,37812 522 | 520,37812 523 | 521,37646 524 | 522,37646 525 | 523,37646 526 | 524,37626 527 | 525,37626 528 | 526,37614 529 | 527,37614 530 | 528,37596 531 | 529,37596 532 | 530,37596 533 | 531,37590 534 | 532,37545 535 | 533,37317 536 | 534,37317 537 | 535,37317 538 | 536,37317 539 | 537,37317 540 | 538,37317 541 | 539,37317 542 | 540,37317 543 | 541,37317 544 | 542,37317 545 | 543,37317 546 | 544,37317 547 | 545,37317 548 | 546,37317 549 | 547,37317 550 | 548,37317 551 | 549,37306 552 | 550,37288 553 | 551,37148 554 | 552,37144 555 | 553,37144 556 | 554,37066 557 | 555,37066 558 | 556,37032 559 | 557,37032 560 | 558,37032 561 | 559,36660 562 | 560,36660 563 | 561,36660 564 | 562,36656 565 | 563,36656 566 | 564,36506 567 | 565,36506 568 | 566,36310 569 | 567,36310 570 | 568,36306 571 | 569,36293 572 | 570,36293 573 | 571,36293 574 | 572,36293 575 | 573,36293 576 | 574,36272 577 | 575,36272 578 | 576,36272 579 | 577,36272 580 | 578,36272 581 | 579,36272 582 | 580,36228 583 | 581,36228 584 | 582,36228 585 | 583,36036 586 | 584,36032 587 | 585,35976 588 | 586,35882 589 | 587,35882 590 | 588,35882 591 | 589,35882 592 | 590,35882 593 | 591,35882 594 | 592,35882 595 | 593,35882 596 | 594,35882 597 | 595,35882 598 | 596,35831 599 | 597,35831 600 | 598,35821 601 | 599,35799 602 | 600,35799 603 | 601,35706 604 | 602,35656 605 | 603,35512 606 | 604,35512 607 | 605,35490 608 | 606,35490 609 | 607,35482 610 | 608,35364 611 | 609,35364 612 | 610,35357 613 | 611,35357 614 | 612,35357 615 | 613,35339 616 | 614,35339 617 | 615,35339 618 | 616,35292 619 | 617,35238 620 | 618,35238 621 | 619,35238 622 | 620,35238 623 | 621,35238 624 | 622,35238 625 | 623,35238 626 | 624,35238 627 | 625,35148 628 | 626,34932 629 | 627,34850 630 | 628,34850 631 | 629,34850 632 | 630,34850 633 | 631,34850 634 | 632,34850 635 | 633,34786 636 | 634,34709 637 | 635,34705 638 | 636,34705 639 | 637,34629 640 | 638,34629 641 | 639,34593 642 | 640,34553 643 | 641,34553 644 | 642,34488 645 | 643,34488 646 | 644,34314 647 | 645,34124 648 | 646,34116 649 | 647,34116 650 | 648,33999 651 | 649,33999 652 | 650,33989 653 | 651,33915 654 | 652,33915 655 | 653,33915 656 | 654,33864 657 | 655,33864 658 | 656,33861 659 | 657,33797 660 | 658,33797 661 | 659,33797 662 | 660,33788 663 | 661,33788 664 | 662,33788 665 | 663,33788 666 | 664,33780 667 | 665,33780 668 | 666,33780 669 | 667,33780 670 | 668,33780 671 | 669,33762 672 | 670,33762 673 | 671,33762 674 | 672,33734 675 | 673,33702 676 | 674,33655 677 | 675,33655 678 | 676,33641 679 | 677,33641 680 | 678,33636 681 | 679,33636 682 | 680,33636 683 | 681,33636 684 | 682,33606 685 | 683,33606 686 | 684,33606 687 | 685,33606 688 | 686,33606 689 | 687,33606 690 | 688,33606 691 | 689,33606 692 | 690,33606 693 | 691,33583 694 | 692,33583 695 | 693,33583 696 | 694,33417 697 | 695,33385 698 | 696,33341 699 | 697,33341 700 | 698,33341 701 | 699,33307 702 | 700,33307 703 | 701,33307 704 | 702,33307 705 | 703,33098 706 | 704,33092 707 | 705,33078 708 | 706,33078 709 | 707,33078 710 | 708,33078 711 | 709,33078 712 | 710,33021 713 | 711,33019 714 | 712,33019 715 | 713,32999 716 | 714,32999 717 | 715,32999 718 | 716,32999 719 | 717,32993 720 | 718,32993 721 | 719,32993 722 | 720,32993 723 | 721,32993 724 | 722,32993 725 | 723,32951 726 | 724,32947 727 | 725,32929 728 | 726,32929 729 | 727,32929 730 | 728,32929 731 | 729,32929 732 | 730,32929 733 | 731,32929 734 | 732,32929 735 | 733,32929 736 | 734,32929 737 | 735,32905 738 | 736,32881 739 | 737,32881 740 | 738,32881 741 | 739,32859 742 | 740,32719 743 | 741,32719 744 | 742,32719 745 | 743,32719 746 | 744,32701 747 | 745,32701 748 | 746,32693 749 | 747,32693 750 | 748,32693 751 | 749,32693 752 | 750,32689 753 | 751,32689 754 | 752,32641 755 | 753,32641 756 | 754,32622 757 | 755,32578 758 | 756,32519 759 | 757,32519 760 | 758,32516 761 | 759,32376 762 | 760,32312 763 | 761,32266 764 | 762,32266 765 | 763,32266 766 | 764,32096 767 | 765,32096 768 | 766,32096 769 | 767,32096 770 | 768,32096 771 | 769,32096 772 | 770,32096 773 | 771,32068 774 | 772,32055 775 | 773,32055 776 | 774,32051 777 | 775,32051 778 | 776,32051 779 | 777,32034 780 | 778,32027 781 | 779,31991 782 | 780,31976 783 | 781,31974 784 | 782,31840 785 | 783,31840 786 | 784,31840 787 | 785,31840 788 | 786,31762 789 | 787,31761 790 | 788,31761 791 | 789,31757 792 | 790,31757 793 | 791,31757 794 | 792,31757 795 | 793,31757 796 | 794,31757 797 | 795,31757 798 | 796,31757 799 | 797,31720 800 | 798,31718 801 | 799,31688 802 | 800,31620 803 | 801,31586 804 | 802,31586 805 | 803,31584 806 | 804,31584 807 | 805,31546 808 | 806,31541 809 | 807,31541 810 | 808,31523 811 | 809,31523 812 | 810,31523 813 | 811,31523 814 | 812,31519 815 | 813,31519 816 | 814,31519 817 | 815,31517 818 | 816,31517 819 | 817,31494 820 | 818,31478 821 | 819,31478 822 | 820,31478 823 | 821,31478 824 | 822,31388 825 | 823,31388 826 | 824,31388 827 | 825,31388 828 | 826,31362 829 | 827,31362 830 | 828,31254 831 | 829,31254 832 | 830,31254 833 | 831,31246 834 | 832,31246 835 | 833,31246 836 | 834,31246 837 | 835,31246 838 | 836,31246 839 | 837,31246 840 | 838,31246 841 | 839,31240 842 | 840,31240 843 | 841,31240 844 | 842,31228 845 | 843,31218 846 | 844,31218 847 | 845,31180 848 | 846,31173 849 | 847,31173 850 | 848,31173 851 | 849,31171 852 | 850,31171 853 | 851,31171 854 | 852,31171 855 | 853,31171 856 | 854,31171 857 | 855,31171 858 | 856,31171 859 | 857,31163 860 | 858,31163 861 | 859,31163 862 | 860,31163 863 | 861,31163 864 | 862,30929 865 | 863,30929 866 | 864,30929 867 | 865,30913 868 | 866,30913 869 | 867,30913 870 | 868,30913 871 | 869,30871 872 | 870,30871 873 | 871,30871 874 | 872,30871 875 | 873,30871 876 | 874,30863 877 | 875,30841 878 | 876,30841 879 | 877,30841 880 | 878,30841 881 | 879,30745 882 | 880,30745 883 | 881,30745 884 | 882,30745 885 | 883,30739 886 | 884,30739 887 | 885,30730 888 | 886,30730 889 | 887,30730 890 | 888,30730 891 | 889,30724 892 | 890,30724 893 | 891,30724 894 | 892,30724 895 | 893,30724 896 | 894,30720 897 | 895,30720 898 | 896,30720 899 | 897,30708 900 | 898,30708 901 | 899,30648 902 | 900,30648 903 | 901,30648 904 | 902,30648 905 | 903,30610 906 | 904,30610 907 | 905,30610 908 | 906,30610 909 | 907,30591 910 | 908,30591 911 | 909,30551 912 | 910,30551 913 | 911,30537 914 | 912,30537 915 | 913,30537 916 | 914,30537 917 | 915,30536 918 | 916,30528 919 | 917,30454 920 | 918,30454 921 | 919,30454 922 | 920,30454 923 | 921,30412 924 | 922,30396 925 | 923,30396 926 | 924,30380 927 | 925,30380 928 | 926,30380 929 | 927,30380 930 | 928,30380 931 | 929,30380 932 | 930,30376 933 | 931,30376 934 | 932,30294 935 | 933,30294 936 | 934,30294 937 | 935,30289 938 | 936,30289 939 | 937,30289 940 | 938,30287 941 | 939,30287 942 | 940,30287 943 | 941,30287 944 | 942,30287 945 | 943,30287 946 | 944,30287 947 | 945,30287 948 | 946,30287 949 | 947,30197 950 | 948,30197 951 | 949,30197 952 | 950,30197 953 | 951,30182 954 | 952,30182 955 | 953,30182 956 | 954,30157 957 | 955,30157 958 | 956,30157 959 | 957,30157 960 | 958,30156 961 | 959,30156 962 | 960,30052 963 | 961,30052 964 | 962,30048 965 | 963,30035 966 | 964,30035 967 | 965,29899 968 | 966,29899 969 | 967,29899 970 | 968,29881 971 | 969,29855 972 | 970,29855 973 | 971,29853 974 | 972,29853 975 | 973,29853 976 | 974,29853 977 | 975,29847 978 | 976,29847 979 | 977,29847 980 | 978,29847 981 | 979,29801 982 | 980,29801 983 | 981,29801 984 | 982,29772 985 | 983,29772 986 | 984,29772 987 | 985,29753 988 | 986,29753 989 | 987,29727 990 | 988,29709 991 | 989,29709 992 | 990,29709 993 | 991,29709 994 | 992,29709 995 | 993,29709 996 | 994,29709 997 | 995,29709 998 | 996,29709 999 | 997,29697 1000 | 998,29697 1001 | 999,29670 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_2.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79111 4 | 2,78773 5 | 3,78702 6 | 4,78672 7 | 5,78603 8 | 6,78589 9 | 7,78531 10 | 8,78477 11 | 9,78271 12 | 10,77963 13 | 11,77905 14 | 12,77715 15 | 13,77637 16 | 14,77515 17 | 15,77247 18 | 16,77207 19 | 17,77151 20 | 18,76999 21 | 19,76948 22 | 20,76621 23 | 21,76395 24 | 22,76313 25 | 23,76156 26 | 24,76156 27 | 25,76026 28 | 26,75795 29 | 27,75671 30 | 28,75527 31 | 29,75413 32 | 30,75125 33 | 31,74986 34 | 32,74826 35 | 33,74662 36 | 34,74639 37 | 35,74639 38 | 36,74447 39 | 37,74440 40 | 38,74190 41 | 39,74172 42 | 40,74094 43 | 41,73996 44 | 42,73932 45 | 43,73878 46 | 44,73814 47 | 45,73665 48 | 46,73660 49 | 47,73660 50 | 48,73624 51 | 49,73624 52 | 50,73468 53 | 51,73425 54 | 52,73379 55 | 53,73165 56 | 54,73011 57 | 55,72933 58 | 56,72817 59 | 57,72727 60 | 58,72685 61 | 59,72430 62 | 60,72418 63 | 61,72256 64 | 62,72256 65 | 63,72256 66 | 64,72188 67 | 65,72182 68 | 66,72174 69 | 67,72150 70 | 68,72089 71 | 69,71842 72 | 70,71588 73 | 71,71390 74 | 72,71234 75 | 73,71140 76 | 74,70980 77 | 75,70868 78 | 76,70728 79 | 77,70720 80 | 78,70720 81 | 79,70550 82 | 80,70478 83 | 81,70380 84 | 82,70168 85 | 83,70054 86 | 84,69851 87 | 85,69851 88 | 86,69851 89 | 87,69851 90 | 88,69851 91 | 89,69697 92 | 90,69529 93 | 91,69439 94 | 92,69428 95 | 93,69428 96 | 94,69330 97 | 95,69314 98 | 96,69314 99 | 97,69278 100 | 98,69278 101 | 99,69158 102 | 100,68900 103 | 101,68754 104 | 102,68647 105 | 103,68647 106 | 104,68576 107 | 105,68514 108 | 106,68514 109 | 107,68514 110 | 108,68285 111 | 109,68263 112 | 110,68133 113 | 111,68077 114 | 112,67889 115 | 113,67889 116 | 114,67772 117 | 115,67658 118 | 116,67609 119 | 117,67388 120 | 118,67089 121 | 119,66869 122 | 120,66613 123 | 121,66507 124 | 122,66274 125 | 123,66274 126 | 124,66274 127 | 125,66100 128 | 126,66080 129 | 127,65850 130 | 128,65850 131 | 129,65618 132 | 130,65407 133 | 131,65407 134 | 132,65308 135 | 133,65298 136 | 134,65099 137 | 135,65027 138 | 136,64913 139 | 137,64813 140 | 138,64813 141 | 139,64569 142 | 140,64569 143 | 141,64546 144 | 142,64546 145 | 143,64526 146 | 144,64526 147 | 145,64441 148 | 146,64441 149 | 147,64441 150 | 148,64409 151 | 149,64218 152 | 150,64218 153 | 151,64154 154 | 152,63786 155 | 153,63706 156 | 154,63706 157 | 155,63464 158 | 156,63444 159 | 157,63444 160 | 158,63328 161 | 159,63307 162 | 160,63254 163 | 161,63254 164 | 162,62746 165 | 163,62734 166 | 164,62603 167 | 165,62603 168 | 166,62491 169 | 167,62491 170 | 168,62433 171 | 169,62433 172 | 170,62433 173 | 171,62410 174 | 172,62084 175 | 173,62014 176 | 174,61878 177 | 175,61835 178 | 176,61835 179 | 177,61835 180 | 178,61835 181 | 179,61835 182 | 180,61679 183 | 181,61573 184 | 182,61573 185 | 183,61435 186 | 184,61302 187 | 185,61193 188 | 186,61049 189 | 187,61049 190 | 188,61049 191 | 189,60951 192 | 190,60949 193 | 191,60935 194 | 192,60935 195 | 193,60935 196 | 194,60829 197 | 195,60760 198 | 196,60703 199 | 197,60703 200 | 198,60696 201 | 199,60624 202 | 200,60546 203 | 201,60396 204 | 202,60396 205 | 203,60306 206 | 204,60274 207 | 205,60266 208 | 206,60258 209 | 207,60177 210 | 208,59960 211 | 209,59673 212 | 210,59415 213 | 211,59405 214 | 212,59405 215 | 213,59393 216 | 214,59239 217 | 215,59233 218 | 216,59207 219 | 217,58900 220 | 218,58641 221 | 219,58467 222 | 220,58093 223 | 221,57885 224 | 222,57855 225 | 223,57720 226 | 224,57667 227 | 225,57577 228 | 226,57577 229 | 227,57577 230 | 228,57449 231 | 229,57373 232 | 230,57181 233 | 231,57151 234 | 232,56935 235 | 233,56487 236 | 234,56322 237 | 235,56254 238 | 236,56230 239 | 237,56194 240 | 238,56082 241 | 239,56040 242 | 240,56040 243 | 241,56040 244 | 242,56014 245 | 243,55935 246 | 244,55935 247 | 245,55935 248 | 246,55912 249 | 247,55912 250 | 248,55830 251 | 249,55823 252 | 250,55819 253 | 251,55655 254 | 252,55613 255 | 253,55564 256 | 254,55558 257 | 255,55383 258 | 256,55217 259 | 257,55141 260 | 258,55141 261 | 259,55141 262 | 260,55141 263 | 261,55020 264 | 262,55014 265 | 263,55012 266 | 264,55012 267 | 265,55012 268 | 266,54908 269 | 267,54908 270 | 268,54750 271 | 269,54750 272 | 270,54722 273 | 271,54722 274 | 272,54607 275 | 273,54602 276 | 274,54602 277 | 275,54602 278 | 276,54368 279 | 277,54271 280 | 278,54213 281 | 279,53963 282 | 280,53963 283 | 281,53869 284 | 282,53771 285 | 283,53695 286 | 284,53663 287 | 285,53663 288 | 286,53619 289 | 287,53619 290 | 288,53619 291 | 289,53619 292 | 290,53451 293 | 291,53451 294 | 292,53262 295 | 293,53262 296 | 294,53144 297 | 295,53138 298 | 296,52938 299 | 297,52938 300 | 298,52922 301 | 299,52840 302 | 300,52752 303 | 301,52752 304 | 302,52752 305 | 303,52572 306 | 304,52458 307 | 305,52400 308 | 306,52255 309 | 307,52255 310 | 308,52255 311 | 309,52231 312 | 310,52231 313 | 311,52197 314 | 312,52197 315 | 313,52197 316 | 314,51969 317 | 315,51969 318 | 316,51761 319 | 317,51413 320 | 318,51413 321 | 319,51353 322 | 320,51244 323 | 321,51244 324 | 322,51221 325 | 323,51221 326 | 324,51221 327 | 325,51143 328 | 326,51143 329 | 327,51057 330 | 328,51057 331 | 329,51057 332 | 330,50862 333 | 331,50862 334 | 332,50856 335 | 333,50856 336 | 334,50608 337 | 335,50500 338 | 336,50492 339 | 337,50492 340 | 338,50398 341 | 339,50320 342 | 340,50320 343 | 341,50168 344 | 342,50128 345 | 343,49854 346 | 344,49854 347 | 345,49577 348 | 346,49481 349 | 347,49358 350 | 348,48984 351 | 349,48974 352 | 350,48871 353 | 351,48805 354 | 352,48802 355 | 353,48802 356 | 354,48802 357 | 355,48638 358 | 356,48564 359 | 357,48552 360 | 358,48506 361 | 359,48477 362 | 360,48350 363 | 361,48350 364 | 362,48324 365 | 363,48298 366 | 364,48298 367 | 365,48298 368 | 366,48267 369 | 367,48267 370 | 368,48254 371 | 369,48254 372 | 370,48254 373 | 371,48254 374 | 372,48254 375 | 373,48254 376 | 374,48254 377 | 375,48208 378 | 376,48208 379 | 377,48199 380 | 378,48111 381 | 379,48055 382 | 380,48055 383 | 381,48055 384 | 382,48055 385 | 383,48053 386 | 384,48009 387 | 385,47691 388 | 386,47573 389 | 387,47573 390 | 388,47573 391 | 389,47490 392 | 390,47403 393 | 391,47176 394 | 392,47176 395 | 393,47176 396 | 394,47056 397 | 395,47032 398 | 396,47032 399 | 397,47032 400 | 398,47022 401 | 399,47013 402 | 400,47010 403 | 401,46958 404 | 402,46958 405 | 403,46958 406 | 404,46958 407 | 405,46852 408 | 406,46650 409 | 407,46650 410 | 408,46620 411 | 409,46620 412 | 410,46620 413 | 411,46561 414 | 412,46489 415 | 413,46255 416 | 414,46255 417 | 415,46255 418 | 416,46169 419 | 417,46169 420 | 418,46136 421 | 419,46109 422 | 420,45994 423 | 421,45945 424 | 422,45922 425 | 423,45922 426 | 424,45922 427 | 425,45922 428 | 426,45888 429 | 427,45888 430 | 428,45877 431 | 429,45877 432 | 430,45877 433 | 431,45877 434 | 432,45877 435 | 433,45877 436 | 434,45877 437 | 435,45877 438 | 436,45877 439 | 437,45877 440 | 438,45761 441 | 439,45746 442 | 440,45746 443 | 441,45650 444 | 442,45650 445 | 443,45580 446 | 444,45580 447 | 445,45580 448 | 446,45580 449 | 447,45532 450 | 448,45474 451 | 449,45474 452 | 450,45408 453 | 451,45408 454 | 452,45408 455 | 453,45400 456 | 454,45292 457 | 455,45292 458 | 456,45282 459 | 457,45282 460 | 458,45282 461 | 459,45276 462 | 460,45276 463 | 461,45244 464 | 462,45244 465 | 463,45232 466 | 464,45232 467 | 465,45232 468 | 466,45232 469 | 467,45225 470 | 468,45173 471 | 469,45173 472 | 470,45023 473 | 471,45023 474 | 472,45023 475 | 473,45023 476 | 474,45023 477 | 475,45023 478 | 476,45023 479 | 477,45023 480 | 478,45023 481 | 479,44999 482 | 480,44999 483 | 481,44900 484 | 482,44900 485 | 483,44900 486 | 484,44900 487 | 485,44683 488 | 486,44649 489 | 487,44555 490 | 488,44555 491 | 489,44555 492 | 490,44555 493 | 491,44555 494 | 492,44555 495 | 493,44471 496 | 494,44471 497 | 495,44242 498 | 496,44226 499 | 497,44166 500 | 498,44077 501 | 499,44077 502 | 500,44014 503 | 501,44014 504 | 502,44014 505 | 503,43942 506 | 504,43916 507 | 505,43916 508 | 506,43916 509 | 507,43817 510 | 508,43763 511 | 509,43599 512 | 510,43599 513 | 511,43585 514 | 512,43399 515 | 513,43372 516 | 514,43372 517 | 515,43372 518 | 516,43130 519 | 517,43130 520 | 518,42938 521 | 519,42840 522 | 520,42840 523 | 521,42840 524 | 522,42794 525 | 523,42794 526 | 524,42794 527 | 525,42688 528 | 526,42592 529 | 527,42592 530 | 528,42592 531 | 529,42592 532 | 530,42592 533 | 531,42592 534 | 532,42592 535 | 533,42592 536 | 534,42542 537 | 535,42398 538 | 536,42375 539 | 537,42375 540 | 538,42375 541 | 539,42375 542 | 540,42375 543 | 541,42375 544 | 542,42375 545 | 543,42199 546 | 544,42199 547 | 545,42176 548 | 546,42098 549 | 547,42098 550 | 548,42098 551 | 549,42037 552 | 550,42036 553 | 551,41998 554 | 552,41826 555 | 553,41826 556 | 554,41826 557 | 555,41826 558 | 556,41826 559 | 557,41826 560 | 558,41826 561 | 559,41826 562 | 560,41802 563 | 561,41802 564 | 562,41802 565 | 563,41802 566 | 564,41480 567 | 565,41480 568 | 566,41480 569 | 567,41480 570 | 568,41480 571 | 569,41480 572 | 570,41355 573 | 571,41355 574 | 572,41281 575 | 573,41211 576 | 574,41211 577 | 575,41211 578 | 576,41163 579 | 577,41163 580 | 578,41153 581 | 579,41008 582 | 580,41003 583 | 581,41003 584 | 582,40989 585 | 583,40984 586 | 584,40984 587 | 585,40913 588 | 586,40913 589 | 587,40913 590 | 588,40913 591 | 589,40913 592 | 590,40913 593 | 591,40913 594 | 592,40913 595 | 593,40913 596 | 594,40913 597 | 595,40886 598 | 596,40860 599 | 597,40857 600 | 598,40857 601 | 599,40709 602 | 600,40709 603 | 601,40515 604 | 602,40515 605 | 603,40515 606 | 604,40515 607 | 605,40501 608 | 606,40448 609 | 607,40448 610 | 608,40448 611 | 609,40448 612 | 610,40426 613 | 611,40410 614 | 612,40410 615 | 613,40350 616 | 614,40350 617 | 615,40350 618 | 616,40350 619 | 617,40320 620 | 618,40212 621 | 619,40212 622 | 620,40212 623 | 621,40134 624 | 622,40134 625 | 623,40114 626 | 624,40114 627 | 625,40095 628 | 626,40095 629 | 627,40095 630 | 628,40095 631 | 629,40084 632 | 630,40084 633 | 631,40084 634 | 632,40084 635 | 633,40084 636 | 634,39961 637 | 635,39961 638 | 636,39961 639 | 637,39961 640 | 638,39801 641 | 639,39789 642 | 640,39789 643 | 641,39789 644 | 642,39789 645 | 643,39783 646 | 644,39783 647 | 645,39748 648 | 646,39696 649 | 647,39580 650 | 648,39580 651 | 649,39580 652 | 650,39580 653 | 651,39577 654 | 652,39577 655 | 653,39568 656 | 654,39558 657 | 655,39558 658 | 656,39558 659 | 657,39558 660 | 658,39352 661 | 659,39348 662 | 660,39348 663 | 661,39348 664 | 662,39348 665 | 663,39348 666 | 664,39348 667 | 665,39348 668 | 666,39348 669 | 667,39348 670 | 668,39348 671 | 669,39348 672 | 670,39348 673 | 671,39348 674 | 672,39348 675 | 673,39348 676 | 674,39348 677 | 675,39348 678 | 676,39348 679 | 677,39218 680 | 678,39218 681 | 679,39218 682 | 680,39218 683 | 681,39218 684 | 682,39136 685 | 683,39136 686 | 684,39086 687 | 685,39086 688 | 686,39086 689 | 687,39086 690 | 688,39033 691 | 689,39033 692 | 690,38992 693 | 691,38992 694 | 692,38992 695 | 693,38992 696 | 694,38974 697 | 695,38948 698 | 696,38926 699 | 697,38913 700 | 698,38913 701 | 699,38913 702 | 700,38913 703 | 701,38913 704 | 702,38884 705 | 703,38884 706 | 704,38780 707 | 705,38780 708 | 706,38780 709 | 707,38774 710 | 708,38774 711 | 709,38504 712 | 710,38504 713 | 711,38504 714 | 712,38504 715 | 713,38498 716 | 714,38495 717 | 715,38441 718 | 716,38441 719 | 717,38441 720 | 718,38441 721 | 719,38441 722 | 720,38441 723 | 721,38330 724 | 722,38330 725 | 723,38330 726 | 724,38330 727 | 725,38330 728 | 726,38330 729 | 727,38247 730 | 728,38247 731 | 729,38247 732 | 730,38247 733 | 731,38247 734 | 732,38247 735 | 733,38247 736 | 734,38247 737 | 735,38247 738 | 736,38247 739 | 737,38231 740 | 738,38231 741 | 739,38225 742 | 740,38171 743 | 741,38055 744 | 742,37845 745 | 743,37845 746 | 744,37834 747 | 745,37833 748 | 746,37833 749 | 747,37833 750 | 748,37833 751 | 749,37833 752 | 750,37833 753 | 751,37833 754 | 752,37833 755 | 753,37821 756 | 754,37815 757 | 755,37815 758 | 756,37815 759 | 757,37815 760 | 758,37815 761 | 759,37815 762 | 760,37803 763 | 761,37759 764 | 762,37759 765 | 763,37759 766 | 764,37759 767 | 765,37759 768 | 766,37759 769 | 767,37759 770 | 768,37759 771 | 769,37759 772 | 770,37759 773 | 771,37700 774 | 772,37700 775 | 773,37496 776 | 774,37496 777 | 775,37496 778 | 776,37496 779 | 777,37496 780 | 778,37496 781 | 779,37496 782 | 780,37193 783 | 781,37193 784 | 782,37193 785 | 783,37193 786 | 784,37193 787 | 785,37193 788 | 786,37193 789 | 787,37062 790 | 788,36821 791 | 789,36821 792 | 790,36821 793 | 791,36819 794 | 792,36819 795 | 793,36819 796 | 794,36819 797 | 795,36767 798 | 796,36767 799 | 797,36767 800 | 798,36749 801 | 799,36721 802 | 800,36721 803 | 801,36721 804 | 802,36659 805 | 803,36659 806 | 804,36659 807 | 805,36589 808 | 806,36515 809 | 807,36515 810 | 808,36515 811 | 809,36515 812 | 810,36515 813 | 811,36477 814 | 812,36477 815 | 813,36477 816 | 814,36477 817 | 815,36477 818 | 816,36477 819 | 817,36467 820 | 818,36467 821 | 819,36467 822 | 820,36429 823 | 821,36203 824 | 822,36019 825 | 823,36012 826 | 824,36012 827 | 825,36012 828 | 826,36012 829 | 827,36012 830 | 828,36012 831 | 829,36012 832 | 830,36012 833 | 831,36012 834 | 832,36012 835 | 833,35948 836 | 834,35948 837 | 835,35948 838 | 836,35912 839 | 837,35910 840 | 838,35898 841 | 839,35898 842 | 840,35898 843 | 841,35898 844 | 842,35898 845 | 843,35898 846 | 844,35898 847 | 845,35876 848 | 846,35876 849 | 847,35876 850 | 848,35848 851 | 849,35848 852 | 850,35848 853 | 851,35848 854 | 852,35848 855 | 853,35841 856 | 854,35835 857 | 855,35835 858 | 856,35832 859 | 857,35832 860 | 858,35827 861 | 859,35827 862 | 860,35827 863 | 861,35827 864 | 862,35827 865 | 863,35820 866 | 864,35780 867 | 865,35724 868 | 866,35724 869 | 867,35724 870 | 868,35720 871 | 869,35720 872 | 870,35720 873 | 871,35720 874 | 872,35720 875 | 873,35720 876 | 874,35720 877 | 875,35720 878 | 876,35720 879 | 877,35720 880 | 878,35720 881 | 879,35720 882 | 880,35720 883 | 881,35714 884 | 882,35714 885 | 883,35673 886 | 884,35673 887 | 885,35673 888 | 886,35665 889 | 887,35665 890 | 888,35665 891 | 889,35665 892 | 890,35665 893 | 891,35665 894 | 892,35665 895 | 893,35665 896 | 894,35543 897 | 895,35473 898 | 896,35473 899 | 897,35313 900 | 898,35313 901 | 899,35313 902 | 900,35258 903 | 901,35258 904 | 902,35258 905 | 903,35249 906 | 904,35235 907 | 905,35229 908 | 906,35229 909 | 907,35229 910 | 908,35223 911 | 909,35223 912 | 910,35223 913 | 911,35223 914 | 912,35223 915 | 913,35223 916 | 914,35223 917 | 915,35223 918 | 916,35223 919 | 917,35223 920 | 918,35223 921 | 919,35223 922 | 920,35223 923 | 921,34889 924 | 922,34889 925 | 923,34884 926 | 924,34884 927 | 925,34884 928 | 926,34884 929 | 927,34868 930 | 928,34860 931 | 929,34860 932 | 930,34854 933 | 931,34854 934 | 932,34854 935 | 933,34812 936 | 934,34812 937 | 935,34812 938 | 936,34790 939 | 937,34790 940 | 938,34790 941 | 939,34790 942 | 940,34790 943 | 941,34790 944 | 942,34790 945 | 943,34790 946 | 944,34784 947 | 945,34784 948 | 946,34570 949 | 947,34570 950 | 948,34550 951 | 949,34550 952 | 950,34550 953 | 951,34550 954 | 952,34528 955 | 953,34528 956 | 954,34528 957 | 955,34524 958 | 956,34524 959 | 957,34524 960 | 958,34524 961 | 959,34524 962 | 960,34450 963 | 961,34450 964 | 962,34450 965 | 963,34450 966 | 964,34450 967 | 965,34449 968 | 966,34245 969 | 967,34213 970 | 968,34213 971 | 969,34213 972 | 970,34213 973 | 971,34213 974 | 972,34213 975 | 973,34213 976 | 974,34213 977 | 975,34213 978 | 976,34213 979 | 977,34213 980 | 978,34201 981 | 979,34201 982 | 980,34201 983 | 981,34201 984 | 982,34201 985 | 983,34201 986 | 984,34201 987 | 985,34201 988 | 986,34201 989 | 987,34201 990 | 988,34201 991 | 989,34201 992 | 990,34201 993 | 991,34075 994 | 992,34075 995 | 993,33997 996 | 994,33997 997 | 995,33997 998 | 996,33997 999 | 997,33997 1000 | 998,33977 1001 | 999,33977 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_256.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,78820 4 | 2,78642 5 | 3,78565 6 | 4,78477 7 | 5,78154 8 | 6,78035 9 | 7,77870 10 | 8,77540 11 | 9,77302 12 | 10,77260 13 | 11,77022 14 | 12,76751 15 | 13,76751 16 | 14,76445 17 | 15,76437 18 | 16,76233 19 | 17,76133 20 | 18,75973 21 | 19,75716 22 | 20,75239 23 | 21,74952 24 | 22,74691 25 | 23,74613 26 | 24,74595 27 | 25,74473 28 | 26,74311 29 | 27,74197 30 | 28,74171 31 | 29,74027 32 | 30,73747 33 | 31,73747 34 | 32,73541 35 | 33,73329 36 | 34,73149 37 | 35,73108 38 | 36,73108 39 | 37,73108 40 | 38,72971 41 | 39,72881 42 | 40,72723 43 | 41,72619 44 | 42,72357 45 | 43,71889 46 | 44,71812 47 | 45,71739 48 | 46,71708 49 | 47,71462 50 | 48,71266 51 | 49,71196 52 | 50,71196 53 | 51,71001 54 | 52,70989 55 | 53,70927 56 | 54,70825 57 | 55,70570 58 | 56,70259 59 | 57,70249 60 | 58,70122 61 | 59,70122 62 | 60,69896 63 | 61,69596 64 | 62,69596 65 | 63,69574 66 | 64,69269 67 | 65,69251 68 | 66,69049 69 | 67,69003 70 | 68,68893 71 | 69,68675 72 | 70,68478 73 | 71,68331 74 | 72,68143 75 | 73,68133 76 | 74,67908 77 | 75,67908 78 | 76,67908 79 | 77,67671 80 | 78,67251 81 | 79,67199 82 | 80,67147 83 | 81,66871 84 | 82,66829 85 | 83,66829 86 | 84,66675 87 | 85,66565 88 | 86,66421 89 | 87,66153 90 | 88,66153 91 | 89,66055 92 | 90,65851 93 | 91,65483 94 | 92,65312 95 | 93,65044 96 | 94,65028 97 | 95,64888 98 | 96,64743 99 | 97,64743 100 | 98,64729 101 | 99,64627 102 | 100,64461 103 | 101,64328 104 | 102,64176 105 | 103,63954 106 | 104,63760 107 | 105,63604 108 | 106,63604 109 | 107,63588 110 | 108,63385 111 | 109,63315 112 | 110,63194 113 | 111,62946 114 | 112,62736 115 | 113,62518 116 | 114,62358 117 | 115,62126 118 | 116,61866 119 | 117,61684 120 | 118,61550 121 | 119,61550 122 | 120,61450 123 | 121,61259 124 | 122,60979 125 | 123,60979 126 | 124,60871 127 | 125,60774 128 | 126,60654 129 | 127,60654 130 | 128,60522 131 | 129,60522 132 | 130,60304 133 | 131,60024 134 | 132,59757 135 | 133,59757 136 | 134,59675 137 | 135,59655 138 | 136,59594 139 | 137,59313 140 | 138,59217 141 | 139,59139 142 | 140,59007 143 | 141,59007 144 | 142,59007 145 | 143,59007 146 | 144,58983 147 | 145,58905 148 | 146,58802 149 | 147,58802 150 | 148,58744 151 | 149,58700 152 | 150,58686 153 | 151,58630 154 | 152,58386 155 | 153,58308 156 | 154,58221 157 | 155,58137 158 | 156,58121 159 | 157,58121 160 | 158,57935 161 | 159,57925 162 | 160,57845 163 | 161,57795 164 | 162,57719 165 | 163,57551 166 | 164,57551 167 | 165,57387 168 | 166,57351 169 | 167,57337 170 | 168,57337 171 | 169,57093 172 | 170,56899 173 | 171,56899 174 | 172,56721 175 | 173,56659 176 | 174,56333 177 | 175,56227 178 | 176,56227 179 | 177,56133 180 | 178,56125 181 | 179,56113 182 | 180,56113 183 | 181,56047 184 | 182,56047 185 | 183,56047 186 | 184,55978 187 | 185,55860 188 | 186,55769 189 | 187,55769 190 | 188,55583 191 | 189,55521 192 | 190,55515 193 | 191,55370 194 | 192,55370 195 | 193,55241 196 | 194,55037 197 | 195,54964 198 | 196,54841 199 | 197,54773 200 | 198,54429 201 | 199,54201 202 | 200,54201 203 | 201,54091 204 | 202,53997 205 | 203,53811 206 | 204,53811 207 | 205,53811 208 | 206,53731 209 | 207,53731 210 | 208,53577 211 | 209,53577 212 | 210,53466 213 | 211,53258 214 | 212,53080 215 | 213,53080 216 | 214,52986 217 | 215,52986 218 | 216,52986 219 | 217,52774 220 | 218,52676 221 | 219,52655 222 | 220,52653 223 | 221,52635 224 | 222,52451 225 | 223,52387 226 | 224,52235 227 | 225,52183 228 | 226,52058 229 | 227,52058 230 | 228,52058 231 | 229,52020 232 | 230,51820 233 | 231,51788 234 | 232,51768 235 | 233,51440 236 | 234,51240 237 | 235,51240 238 | 236,51150 239 | 237,50814 240 | 238,50814 241 | 239,50814 242 | 240,50492 243 | 241,50492 244 | 242,50492 245 | 243,50464 246 | 244,50459 247 | 245,50309 248 | 246,50309 249 | 247,50251 250 | 248,50251 251 | 249,49787 252 | 250,49753 253 | 251,49753 254 | 252,49635 255 | 253,49438 256 | 254,49438 257 | 255,49137 258 | 256,49137 259 | 257,49137 260 | 258,49137 261 | 259,49137 262 | 260,49057 263 | 261,48959 264 | 262,48775 265 | 263,48617 266 | 264,48584 267 | 265,48571 268 | 266,48556 269 | 267,48435 270 | 268,48210 271 | 269,48024 272 | 270,48024 273 | 271,47884 274 | 272,47774 275 | 273,47774 276 | 274,47728 277 | 275,47708 278 | 276,47708 279 | 277,47708 280 | 278,47577 281 | 279,47577 282 | 280,47469 283 | 281,47457 284 | 282,47427 285 | 283,47409 286 | 284,47273 287 | 285,47273 288 | 286,47262 289 | 287,47186 290 | 288,47186 291 | 289,47158 292 | 290,46998 293 | 291,46840 294 | 292,46768 295 | 293,46518 296 | 294,46518 297 | 295,46494 298 | 296,46494 299 | 297,46494 300 | 298,46478 301 | 299,46358 302 | 300,46333 303 | 301,45959 304 | 302,45715 305 | 303,45715 306 | 304,45624 307 | 305,45624 308 | 306,45431 309 | 307,45324 310 | 308,45275 311 | 309,45275 312 | 310,45275 313 | 311,45133 314 | 312,45107 315 | 313,44885 316 | 314,44729 317 | 315,44729 318 | 316,44729 319 | 317,44711 320 | 318,44645 321 | 319,44645 322 | 320,44634 323 | 321,44634 324 | 322,44544 325 | 323,44524 326 | 324,44504 327 | 325,44504 328 | 326,44498 329 | 327,44340 330 | 328,44314 331 | 329,44314 332 | 330,44314 333 | 331,44314 334 | 332,44253 335 | 333,44247 336 | 334,44243 337 | 335,44085 338 | 336,44058 339 | 337,44058 340 | 338,44010 341 | 339,43969 342 | 340,43789 343 | 341,43789 344 | 342,43789 345 | 343,43789 346 | 344,43789 347 | 345,43789 348 | 346,43669 349 | 347,43653 350 | 348,43507 351 | 349,43493 352 | 350,43493 353 | 351,43488 354 | 352,43471 355 | 353,43360 356 | 354,43290 357 | 355,43226 358 | 356,43226 359 | 357,43068 360 | 358,43052 361 | 359,43052 362 | 360,43052 363 | 361,42986 364 | 362,42986 365 | 363,42986 366 | 364,42986 367 | 365,42986 368 | 366,42934 369 | 367,42909 370 | 368,42703 371 | 369,42689 372 | 370,42632 373 | 371,42580 374 | 372,42556 375 | 373,42263 376 | 374,42145 377 | 375,42131 378 | 376,42131 379 | 377,42131 380 | 378,42131 381 | 379,42131 382 | 380,42113 383 | 381,42113 384 | 382,42113 385 | 383,42113 386 | 384,42113 387 | 385,42050 388 | 386,42046 389 | 387,42046 390 | 388,42046 391 | 389,42046 392 | 390,41996 393 | 391,41976 394 | 392,41848 395 | 393,41845 396 | 394,41845 397 | 395,41838 398 | 396,41832 399 | 397,41826 400 | 398,41826 401 | 399,41822 402 | 400,41655 403 | 401,41511 404 | 402,41469 405 | 403,41469 406 | 404,41469 407 | 405,41469 408 | 406,41444 409 | 407,41436 410 | 408,41436 411 | 409,41402 412 | 410,41302 413 | 411,41302 414 | 412,41212 415 | 413,40910 416 | 414,40732 417 | 415,40732 418 | 416,40732 419 | 417,40732 420 | 418,40716 421 | 419,40580 422 | 420,40558 423 | 421,40462 424 | 422,40289 425 | 423,40289 426 | 424,40289 427 | 425,40180 428 | 426,40180 429 | 427,39921 430 | 428,39867 431 | 429,39867 432 | 430,39710 433 | 431,39710 434 | 432,39682 435 | 433,39682 436 | 434,39682 437 | 435,39638 438 | 436,39614 439 | 437,39614 440 | 438,39526 441 | 439,39526 442 | 440,39526 443 | 441,39510 444 | 442,39461 445 | 443,39461 446 | 444,39461 447 | 445,39461 448 | 446,39373 449 | 447,39255 450 | 448,39255 451 | 449,39255 452 | 450,39255 453 | 451,39255 454 | 452,38875 455 | 453,38875 456 | 454,38577 457 | 455,38577 458 | 456,38379 459 | 457,38377 460 | 458,38377 461 | 459,38374 462 | 460,38374 463 | 461,38146 464 | 462,38146 465 | 463,38100 466 | 464,38100 467 | 465,38100 468 | 466,38100 469 | 467,38100 470 | 468,38042 471 | 469,38042 472 | 470,38042 473 | 471,38042 474 | 472,38042 475 | 473,38042 476 | 474,38028 477 | 475,38014 478 | 476,37992 479 | 477,37974 480 | 478,37766 481 | 479,37766 482 | 480,37766 483 | 481,37766 484 | 482,37726 485 | 483,37654 486 | 484,37605 487 | 485,37605 488 | 486,37587 489 | 487,37555 490 | 488,37555 491 | 489,37555 492 | 490,37549 493 | 491,37549 494 | 492,37505 495 | 493,37505 496 | 494,37505 497 | 495,37505 498 | 496,37505 499 | 497,37475 500 | 498,37475 501 | 499,37475 502 | 500,37475 503 | 501,37475 504 | 502,37471 505 | 503,37360 506 | 504,37360 507 | 505,37360 508 | 506,37341 509 | 507,37341 510 | 508,37316 511 | 509,37124 512 | 510,37023 513 | 511,37023 514 | 512,37023 515 | 513,36925 516 | 514,36925 517 | 515,36879 518 | 516,36778 519 | 517,36778 520 | 518,36778 521 | 519,36778 522 | 520,36778 523 | 521,36778 524 | 522,36778 525 | 523,36778 526 | 524,36778 527 | 525,36778 528 | 526,36778 529 | 527,36778 530 | 528,36777 531 | 529,36777 532 | 530,36777 533 | 531,36703 534 | 532,36696 535 | 533,36691 536 | 534,36676 537 | 535,36676 538 | 536,36676 539 | 537,36676 540 | 538,36608 541 | 539,36608 542 | 540,36608 543 | 541,36550 544 | 542,36550 545 | 543,36550 546 | 544,36550 547 | 545,36550 548 | 546,36472 549 | 547,36458 550 | 548,36458 551 | 549,36392 552 | 550,36392 553 | 551,36392 554 | 552,36392 555 | 553,36392 556 | 554,36392 557 | 555,36392 558 | 556,36352 559 | 557,36210 560 | 558,36210 561 | 559,36210 562 | 560,36047 563 | 561,36047 564 | 562,36024 565 | 563,36024 566 | 564,36024 567 | 565,36024 568 | 566,35926 569 | 567,35926 570 | 568,35920 571 | 569,35920 572 | 570,35885 573 | 571,35826 574 | 572,35826 575 | 573,35826 576 | 574,35704 577 | 575,35637 578 | 576,35637 579 | 577,35637 580 | 578,35637 581 | 579,35629 582 | 580,35629 583 | 581,35629 584 | 582,35629 585 | 583,35629 586 | 584,35629 587 | 585,35629 588 | 586,35629 589 | 587,35491 590 | 588,35487 591 | 589,35481 592 | 590,35476 593 | 591,35470 594 | 592,35470 595 | 593,35470 596 | 594,35452 597 | 595,35440 598 | 596,35440 599 | 597,35440 600 | 598,35378 601 | 599,35378 602 | 600,35378 603 | 601,35268 604 | 602,35243 605 | 603,35219 606 | 604,35219 607 | 605,35217 608 | 606,35217 609 | 607,35217 610 | 608,35217 611 | 609,35205 612 | 610,35143 613 | 611,35143 614 | 612,35143 615 | 613,35077 616 | 614,35076 617 | 615,35076 618 | 616,35076 619 | 617,35076 620 | 618,35076 621 | 619,35076 622 | 620,35076 623 | 621,34979 624 | 622,34979 625 | 623,34979 626 | 624,34951 627 | 625,34951 628 | 626,34951 629 | 627,34840 630 | 628,34786 631 | 629,34699 632 | 630,34699 633 | 631,34699 634 | 632,34699 635 | 633,34555 636 | 634,34555 637 | 635,34553 638 | 636,34414 639 | 637,34408 640 | 638,34408 641 | 639,34408 642 | 640,34408 643 | 641,34371 644 | 642,34371 645 | 643,33997 646 | 644,33997 647 | 645,33943 648 | 646,33943 649 | 647,33940 650 | 648,33940 651 | 649,33940 652 | 650,33940 653 | 651,33940 654 | 652,33940 655 | 653,33876 656 | 654,33815 657 | 655,33793 658 | 656,33758 659 | 657,33758 660 | 658,33758 661 | 659,33730 662 | 660,33730 663 | 661,33708 664 | 662,33708 665 | 663,33684 666 | 664,33684 667 | 665,33595 668 | 666,33595 669 | 667,33595 670 | 668,33595 671 | 669,33595 672 | 670,33595 673 | 671,33595 674 | 672,33381 675 | 673,33375 676 | 674,33375 677 | 675,33327 678 | 676,33327 679 | 677,33327 680 | 678,33327 681 | 679,33327 682 | 680,33327 683 | 681,33327 684 | 682,33327 685 | 683,33310 686 | 684,33310 687 | 685,33298 688 | 686,33298 689 | 687,33235 690 | 688,33235 691 | 689,33229 692 | 690,33209 693 | 691,33209 694 | 692,33195 695 | 693,33195 696 | 694,33195 697 | 695,33165 698 | 696,33165 699 | 697,33089 700 | 698,33089 701 | 699,32965 702 | 700,32937 703 | 701,32937 704 | 702,32905 705 | 703,32905 706 | 704,32905 707 | 705,32905 708 | 706,32731 709 | 707,32731 710 | 708,32679 711 | 709,32679 712 | 710,32663 713 | 711,32663 714 | 712,32619 715 | 713,32619 716 | 714,32617 717 | 715,32609 718 | 716,32609 719 | 717,32609 720 | 718,32609 721 | 719,32585 722 | 720,32585 723 | 721,32521 724 | 722,32515 725 | 723,32515 726 | 724,32515 727 | 725,32515 728 | 726,32511 729 | 727,32511 730 | 728,32511 731 | 729,32511 732 | 730,32511 733 | 731,32459 734 | 732,32459 735 | 733,32459 736 | 734,32450 737 | 735,32438 738 | 736,32438 739 | 737,32438 740 | 738,32356 741 | 739,32356 742 | 740,32356 743 | 741,32330 744 | 742,32330 745 | 743,32330 746 | 744,32318 747 | 745,32307 748 | 746,32307 749 | 747,32307 750 | 748,32307 751 | 749,32228 752 | 750,32228 753 | 751,32228 754 | 752,32228 755 | 753,32228 756 | 754,32216 757 | 755,32216 758 | 756,32216 759 | 757,32216 760 | 758,32216 761 | 759,32194 762 | 760,32191 763 | 761,32191 764 | 762,32191 765 | 763,32191 766 | 764,32191 767 | 765,32191 768 | 766,32191 769 | 767,32191 770 | 768,32191 771 | 769,32191 772 | 770,32191 773 | 771,32191 774 | 772,32191 775 | 773,32191 776 | 774,32191 777 | 775,32191 778 | 776,32191 779 | 777,32191 780 | 778,32191 781 | 779,32191 782 | 780,32187 783 | 781,32187 784 | 782,32187 785 | 783,32187 786 | 784,32187 787 | 785,32187 788 | 786,32035 789 | 787,32021 790 | 788,32021 791 | 789,32021 792 | 790,32021 793 | 791,32021 794 | 792,32017 795 | 793,32017 796 | 794,32017 797 | 795,32017 798 | 796,32017 799 | 797,32017 800 | 798,32013 801 | 799,32013 802 | 800,32013 803 | 801,32013 804 | 802,31991 805 | 803,31987 806 | 804,31915 807 | 805,31915 808 | 806,31879 809 | 807,31855 810 | 808,31855 811 | 809,31847 812 | 810,31847 813 | 811,31847 814 | 812,31847 815 | 813,31795 816 | 814,31795 817 | 815,31795 818 | 816,31795 819 | 817,31749 820 | 818,31749 821 | 819,31717 822 | 820,31711 823 | 821,31711 824 | 822,31711 825 | 823,31711 826 | 824,31711 827 | 825,31711 828 | 826,31711 829 | 827,31710 830 | 828,31710 831 | 829,31638 832 | 830,31638 833 | 831,31638 834 | 832,31516 835 | 833,31516 836 | 834,31516 837 | 835,31516 838 | 836,31516 839 | 837,31516 840 | 838,31400 841 | 839,31400 842 | 840,31400 843 | 841,31400 844 | 842,31400 845 | 843,31400 846 | 844,31367 847 | 845,31367 848 | 846,31367 849 | 847,31367 850 | 848,31357 851 | 849,31357 852 | 850,31357 853 | 851,31357 854 | 852,31357 855 | 853,31357 856 | 854,31357 857 | 855,31357 858 | 856,31357 859 | 857,31321 860 | 858,31321 861 | 859,31321 862 | 860,31321 863 | 861,31319 864 | 862,31183 865 | 863,31183 866 | 864,31183 867 | 865,31183 868 | 866,31145 869 | 867,31145 870 | 868,31145 871 | 869,31145 872 | 870,31145 873 | 871,31145 874 | 872,31059 875 | 873,31057 876 | 874,30991 877 | 875,30991 878 | 876,30960 879 | 877,30906 880 | 878,30906 881 | 879,30906 882 | 880,30906 883 | 881,30906 884 | 882,30906 885 | 883,30906 886 | 884,30898 887 | 885,30878 888 | 886,30878 889 | 887,30878 890 | 888,30878 891 | 889,30878 892 | 890,30878 893 | 891,30878 894 | 892,30878 895 | 893,30849 896 | 894,30849 897 | 895,30807 898 | 896,30807 899 | 897,30807 900 | 898,30799 901 | 899,30799 902 | 900,30799 903 | 901,30799 904 | 902,30799 905 | 903,30799 906 | 904,30777 907 | 905,30643 908 | 906,30643 909 | 907,30637 910 | 908,30637 911 | 909,30637 912 | 910,30637 913 | 911,30637 914 | 912,30637 915 | 913,30637 916 | 914,30601 917 | 915,30589 918 | 916,30589 919 | 917,30589 920 | 918,30589 921 | 919,30582 922 | 920,30582 923 | 921,30582 924 | 922,30582 925 | 923,30582 926 | 924,30572 927 | 925,30572 928 | 926,30572 929 | 927,30572 930 | 928,30572 931 | 929,30572 932 | 930,30572 933 | 931,30572 934 | 932,30572 935 | 933,30572 936 | 934,30570 937 | 935,30570 938 | 936,30554 939 | 937,30554 940 | 938,30554 941 | 939,30554 942 | 940,30554 943 | 941,30554 944 | 942,30532 945 | 943,30532 946 | 944,30532 947 | 945,30520 948 | 946,30520 949 | 947,30490 950 | 948,30490 951 | 949,30394 952 | 950,30392 953 | 951,30392 954 | 952,30392 955 | 953,30392 956 | 954,30392 957 | 955,30392 958 | 956,30392 959 | 957,30392 960 | 958,30392 961 | 959,30392 962 | 960,30392 963 | 961,30392 964 | 962,30392 965 | 963,30392 966 | 964,30392 967 | 965,30392 968 | 966,30392 969 | 967,30392 970 | 968,30392 971 | 969,30392 972 | 970,30392 973 | 971,30392 974 | 972,30392 975 | 973,30392 976 | 974,30384 977 | 975,30384 978 | 976,30384 979 | 977,30384 980 | 978,30384 981 | 979,30384 982 | 980,30384 983 | 981,30384 984 | 982,30384 985 | 983,30384 986 | 984,30384 987 | 985,30384 988 | 986,30384 989 | 987,30384 990 | 988,30384 991 | 989,30384 992 | 990,30370 993 | 991,30368 994 | 992,30368 995 | 993,30367 996 | 994,30367 997 | 995,30367 998 | 996,30361 999 | 997,30361 1000 | 998,30361 1001 | 999,30361 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_32.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79132 4 | 2,78874 5 | 3,78716 6 | 4,78670 7 | 5,78528 8 | 6,78478 9 | 7,78414 10 | 8,78244 11 | 9,77896 12 | 10,77806 13 | 11,77552 14 | 12,77445 15 | 13,77177 16 | 14,76981 17 | 15,76807 18 | 16,76757 19 | 17,76476 20 | 18,76231 21 | 19,76157 22 | 20,76098 23 | 21,76072 24 | 22,75726 25 | 23,75574 26 | 24,75428 27 | 25,75336 28 | 26,75336 29 | 27,75136 30 | 28,74663 31 | 29,74527 32 | 30,74421 33 | 31,74341 34 | 32,74183 35 | 33,74183 36 | 34,74127 37 | 35,74039 38 | 36,73833 39 | 37,73758 40 | 38,73518 41 | 39,73328 42 | 40,73302 43 | 41,72765 44 | 42,72567 45 | 43,72567 46 | 44,72409 47 | 45,72325 48 | 46,72158 49 | 47,72010 50 | 48,71816 51 | 49,71668 52 | 50,71290 53 | 51,71116 54 | 52,71078 55 | 53,70950 56 | 54,70886 57 | 55,70699 58 | 56,70565 59 | 57,70391 60 | 58,70245 61 | 59,70095 62 | 60,69936 63 | 61,69856 64 | 62,69649 65 | 63,69574 66 | 64,69546 67 | 65,69546 68 | 66,69465 69 | 67,69459 70 | 68,69105 71 | 69,69103 72 | 70,69077 73 | 71,68873 74 | 72,68657 75 | 73,68530 76 | 74,68438 77 | 75,68254 78 | 76,68052 79 | 77,67889 80 | 78,67861 81 | 79,67515 82 | 80,67487 83 | 81,67184 84 | 82,67117 85 | 83,66991 86 | 84,66739 87 | 85,66617 88 | 86,66319 89 | 87,66071 90 | 88,66059 91 | 89,65555 92 | 90,65555 93 | 91,65390 94 | 92,65262 95 | 93,65190 96 | 94,65176 97 | 95,65006 98 | 96,64938 99 | 97,64833 100 | 98,64573 101 | 99,64549 102 | 100,64549 103 | 101,64530 104 | 102,64238 105 | 103,64201 106 | 104,64120 107 | 105,63824 108 | 106,63748 109 | 107,63748 110 | 108,63664 111 | 109,63470 112 | 110,63146 113 | 111,62996 114 | 112,62958 115 | 113,62958 116 | 114,62921 117 | 115,62797 118 | 116,62629 119 | 117,62429 120 | 118,62349 121 | 119,62174 122 | 120,62134 123 | 121,61996 124 | 122,61621 125 | 123,61567 126 | 124,61364 127 | 125,61247 128 | 126,61127 129 | 127,61001 130 | 128,60947 131 | 129,60761 132 | 130,60720 133 | 131,60568 134 | 132,60204 135 | 133,59974 136 | 134,59830 137 | 135,59682 138 | 136,59682 139 | 137,59675 140 | 138,59545 141 | 139,59545 142 | 140,59545 143 | 141,59421 144 | 142,59307 145 | 143,59177 146 | 144,58927 147 | 145,58897 148 | 146,58897 149 | 147,58849 150 | 148,58647 151 | 149,58638 152 | 150,58512 153 | 151,58512 154 | 152,58512 155 | 153,58360 156 | 154,58285 157 | 155,58175 158 | 156,58005 159 | 157,58005 160 | 158,57991 161 | 159,57991 162 | 160,57941 163 | 161,57800 164 | 162,57528 165 | 163,57528 166 | 164,57440 167 | 165,57417 168 | 166,57216 169 | 167,57091 170 | 168,57091 171 | 169,56925 172 | 170,56901 173 | 171,56661 174 | 172,56661 175 | 173,56410 176 | 174,56377 177 | 175,56337 178 | 176,56337 179 | 177,56195 180 | 178,56061 181 | 179,56061 182 | 180,55961 183 | 181,55861 184 | 182,55677 185 | 183,55669 186 | 184,55558 187 | 185,55526 188 | 186,55446 189 | 187,55446 190 | 188,55321 191 | 189,55195 192 | 190,55125 193 | 191,55078 194 | 192,55063 195 | 193,55063 196 | 194,54890 197 | 195,54628 198 | 196,54476 199 | 197,54328 200 | 198,54241 201 | 199,54218 202 | 200,54218 203 | 201,54218 204 | 202,54162 205 | 203,54162 206 | 204,54162 207 | 205,54156 208 | 206,54156 209 | 207,54156 210 | 208,54012 211 | 209,53912 212 | 210,53906 213 | 211,53856 214 | 212,53856 215 | 213,53506 216 | 214,53506 217 | 215,53495 218 | 216,53443 219 | 217,53399 220 | 218,53341 221 | 219,53332 222 | 220,53117 223 | 221,52953 224 | 222,52951 225 | 223,52686 226 | 224,52640 227 | 225,52583 228 | 226,52487 229 | 227,52396 230 | 228,52396 231 | 229,52308 232 | 230,52294 233 | 231,52268 234 | 232,52266 235 | 233,52216 236 | 234,52057 237 | 235,52049 238 | 236,52045 239 | 237,51991 240 | 238,51857 241 | 239,51853 242 | 240,51849 243 | 241,51565 244 | 242,51565 245 | 243,51533 246 | 244,51533 247 | 245,51380 248 | 246,51376 249 | 247,51364 250 | 248,51364 251 | 249,51364 252 | 250,51364 253 | 251,51359 254 | 252,51189 255 | 253,50993 256 | 254,50952 257 | 255,50924 258 | 256,50914 259 | 257,50792 260 | 258,50623 261 | 259,50575 262 | 260,50575 263 | 261,50373 264 | 262,50349 265 | 263,50349 266 | 264,50337 267 | 265,50113 268 | 266,49875 269 | 267,49865 270 | 268,49865 271 | 269,49800 272 | 270,49729 273 | 271,49729 274 | 272,49515 275 | 273,49489 276 | 274,49465 277 | 275,49303 278 | 276,49283 279 | 277,49265 280 | 278,49123 281 | 279,49033 282 | 280,49012 283 | 281,49012 284 | 282,48872 285 | 283,48872 286 | 284,48872 287 | 285,48836 288 | 286,48836 289 | 287,48788 290 | 288,48680 291 | 289,48504 292 | 290,48504 293 | 291,48504 294 | 292,48504 295 | 293,48374 296 | 294,48354 297 | 295,48354 298 | 296,48354 299 | 297,48302 300 | 298,48302 301 | 299,48223 302 | 300,48122 303 | 301,48102 304 | 302,48102 305 | 303,48059 306 | 304,47988 307 | 305,47988 308 | 306,47816 309 | 307,47816 310 | 308,47652 311 | 309,47509 312 | 310,47493 313 | 311,47361 314 | 312,47361 315 | 313,47361 316 | 314,47243 317 | 315,47203 318 | 316,47194 319 | 317,47194 320 | 318,47194 321 | 319,47194 322 | 320,47171 323 | 321,47171 324 | 322,47171 325 | 323,47161 326 | 324,47117 327 | 325,47081 328 | 326,47081 329 | 327,47023 330 | 328,47021 331 | 329,47021 332 | 330,46915 333 | 331,46815 334 | 332,46815 335 | 333,46571 336 | 334,46537 337 | 335,46354 338 | 336,46354 339 | 337,46354 340 | 338,46354 341 | 339,46354 342 | 340,46307 343 | 341,46299 344 | 342,46299 345 | 343,46228 346 | 344,46194 347 | 345,45878 348 | 346,45878 349 | 347,45732 350 | 348,45716 351 | 349,45510 352 | 350,45510 353 | 351,45510 354 | 352,45448 355 | 353,45200 356 | 354,45200 357 | 355,44992 358 | 356,44992 359 | 357,44991 360 | 358,44974 361 | 359,44886 362 | 360,44886 363 | 361,44886 364 | 362,44872 365 | 363,44872 366 | 364,44872 367 | 365,44868 368 | 366,44810 369 | 367,44702 370 | 368,44352 371 | 369,44352 372 | 370,44352 373 | 371,44336 374 | 372,44316 375 | 373,44316 376 | 374,44316 377 | 375,44316 378 | 376,44314 379 | 377,44149 380 | 378,44057 381 | 379,44043 382 | 380,44027 383 | 381,44027 384 | 382,44027 385 | 383,43959 386 | 384,43959 387 | 385,43817 388 | 386,43801 389 | 387,43694 390 | 388,43532 391 | 389,43532 392 | 390,43471 393 | 391,43365 394 | 392,43173 395 | 393,43169 396 | 394,43169 397 | 395,43169 398 | 396,43169 399 | 397,43169 400 | 398,43169 401 | 399,42939 402 | 400,42900 403 | 401,42848 404 | 402,42764 405 | 403,42764 406 | 404,42764 407 | 405,42694 408 | 406,42571 409 | 407,42571 410 | 408,42571 411 | 409,42571 412 | 410,42571 413 | 411,42353 414 | 412,42353 415 | 413,42116 416 | 414,41988 417 | 415,41985 418 | 416,41976 419 | 417,41889 420 | 418,41707 421 | 419,41619 422 | 420,41619 423 | 421,41619 424 | 422,41568 425 | 423,41386 426 | 424,41233 427 | 425,41233 428 | 426,41233 429 | 427,41215 430 | 428,41198 431 | 429,40908 432 | 430,40889 433 | 431,40776 434 | 432,40634 435 | 433,40514 436 | 434,40512 437 | 435,40472 438 | 436,40426 439 | 437,40209 440 | 438,40209 441 | 439,40137 442 | 440,40123 443 | 441,39943 444 | 442,39811 445 | 443,39801 446 | 444,39783 447 | 445,39783 448 | 446,39595 449 | 447,39549 450 | 448,39549 451 | 449,39549 452 | 450,39549 453 | 451,39489 454 | 452,39375 455 | 453,39375 456 | 454,39369 457 | 455,39243 458 | 456,39241 459 | 457,39110 460 | 458,38984 461 | 459,38984 462 | 460,38984 463 | 461,38984 464 | 462,38932 465 | 463,38902 466 | 464,38819 467 | 465,38794 468 | 466,38724 469 | 467,38719 470 | 468,38719 471 | 469,38719 472 | 470,38571 473 | 471,38462 474 | 472,38435 475 | 473,38435 476 | 474,38435 477 | 475,38407 478 | 476,38407 479 | 477,38407 480 | 478,38407 481 | 479,38407 482 | 480,38350 483 | 481,38350 484 | 482,38350 485 | 483,38190 486 | 484,37754 487 | 485,37718 488 | 486,37718 489 | 487,37627 490 | 488,37513 491 | 489,37513 492 | 490,37513 493 | 491,37490 494 | 492,37247 495 | 493,37247 496 | 494,37247 497 | 495,37247 498 | 496,37247 499 | 497,37159 500 | 498,37159 501 | 499,37159 502 | 500,37135 503 | 501,36841 504 | 502,36841 505 | 503,36828 506 | 504,36828 507 | 505,36828 508 | 506,36792 509 | 507,36792 510 | 508,36778 511 | 509,36775 512 | 510,36699 513 | 511,36699 514 | 512,36699 515 | 513,36566 516 | 514,36566 517 | 515,36409 518 | 516,36285 519 | 517,36241 520 | 518,36229 521 | 519,36201 522 | 520,36201 523 | 521,36187 524 | 522,36187 525 | 523,36187 526 | 524,36157 527 | 525,36157 528 | 526,36157 529 | 527,36157 530 | 528,36157 531 | 529,36147 532 | 530,36147 533 | 531,36147 534 | 532,36147 535 | 533,36147 536 | 534,36147 537 | 535,36126 538 | 536,36126 539 | 537,36010 540 | 538,35855 541 | 539,35846 542 | 540,35846 543 | 541,35840 544 | 542,35800 545 | 543,35783 546 | 544,35783 547 | 545,35783 548 | 546,35783 549 | 547,35783 550 | 548,35783 551 | 549,35783 552 | 550,35669 553 | 551,35653 554 | 552,35653 555 | 553,35653 556 | 554,35653 557 | 555,35653 558 | 556,35653 559 | 557,35619 560 | 558,35597 561 | 559,35588 562 | 560,35524 563 | 561,35456 564 | 562,35456 565 | 563,35456 566 | 564,35456 567 | 565,35251 568 | 566,35185 569 | 567,35175 570 | 568,35175 571 | 569,35147 572 | 570,35147 573 | 571,35147 574 | 572,35093 575 | 573,35032 576 | 574,34973 577 | 575,34963 578 | 576,34963 579 | 577,34963 580 | 578,34963 581 | 579,34919 582 | 580,34889 583 | 581,34889 584 | 582,34861 585 | 583,34861 586 | 584,34861 587 | 585,34861 588 | 586,34861 589 | 587,34861 590 | 588,34861 591 | 589,34853 592 | 590,34853 593 | 591,34853 594 | 592,34853 595 | 593,34853 596 | 594,34853 597 | 595,34700 598 | 596,34552 599 | 597,34373 600 | 598,34373 601 | 599,34373 602 | 600,34373 603 | 601,34366 604 | 602,34366 605 | 603,34366 606 | 604,34366 607 | 605,34366 608 | 606,34366 609 | 607,34361 610 | 608,34348 611 | 609,34348 612 | 610,34302 613 | 611,34267 614 | 612,34267 615 | 613,34215 616 | 614,34203 617 | 615,34203 618 | 616,34177 619 | 617,34115 620 | 618,34007 621 | 619,34007 622 | 620,33921 623 | 621,33921 624 | 622,33921 625 | 623,33921 626 | 624,33921 627 | 625,33921 628 | 626,33921 629 | 627,33921 630 | 628,33921 631 | 629,33921 632 | 630,33901 633 | 631,33901 634 | 632,33793 635 | 633,33793 636 | 634,33789 637 | 635,33704 638 | 636,33650 639 | 637,33606 640 | 638,33602 641 | 639,33602 642 | 640,33602 643 | 641,33602 644 | 642,33602 645 | 643,33602 646 | 644,33602 647 | 645,33600 648 | 646,33588 649 | 647,33588 650 | 648,33588 651 | 649,33588 652 | 650,33560 653 | 651,33560 654 | 652,33560 655 | 653,33560 656 | 654,33558 657 | 655,33542 658 | 656,33542 659 | 657,33542 660 | 658,33400 661 | 659,33254 662 | 660,33227 663 | 661,33227 664 | 662,33030 665 | 663,33030 666 | 664,33030 667 | 665,33030 668 | 666,33030 669 | 667,33030 670 | 668,33024 671 | 669,33024 672 | 670,32952 673 | 671,32903 674 | 672,32893 675 | 673,32893 676 | 674,32893 677 | 675,32887 678 | 676,32874 679 | 677,32844 680 | 678,32841 681 | 679,32841 682 | 680,32839 683 | 681,32839 684 | 682,32741 685 | 683,32539 686 | 684,32539 687 | 685,32539 688 | 686,32534 689 | 687,32530 690 | 688,32392 691 | 689,32392 692 | 690,32392 693 | 691,32372 694 | 692,32372 695 | 693,32372 696 | 694,32318 697 | 695,32296 698 | 696,32296 699 | 697,32078 700 | 698,32078 701 | 699,31969 702 | 700,31969 703 | 701,31969 704 | 702,31941 705 | 703,31909 706 | 704,31909 707 | 705,31889 708 | 706,31889 709 | 707,31889 710 | 708,31889 711 | 709,31817 712 | 710,31817 713 | 711,31817 714 | 712,31767 715 | 713,31767 716 | 714,31743 717 | 715,31734 718 | 716,31734 719 | 717,31636 720 | 718,31636 721 | 719,31636 722 | 720,31632 723 | 721,31632 724 | 722,31632 725 | 723,31632 726 | 724,31594 727 | 725,31594 728 | 726,31594 729 | 727,31584 730 | 728,31584 731 | 729,31584 732 | 730,31564 733 | 731,31554 734 | 732,31554 735 | 733,31540 736 | 734,31540 737 | 735,31540 738 | 736,31540 739 | 737,31540 740 | 738,31540 741 | 739,31540 742 | 740,31534 743 | 741,31436 744 | 742,31436 745 | 743,31383 746 | 744,31383 747 | 745,31383 748 | 746,31369 749 | 747,31283 750 | 748,31271 751 | 749,31271 752 | 750,31041 753 | 751,31041 754 | 752,31007 755 | 753,31007 756 | 754,30992 757 | 755,30992 758 | 756,30992 759 | 757,30992 760 | 758,30992 761 | 759,30992 762 | 760,30992 763 | 761,30992 764 | 762,30992 765 | 763,30992 766 | 764,30992 767 | 765,30880 768 | 766,30880 769 | 767,30694 770 | 768,30694 771 | 769,30682 772 | 770,30682 773 | 771,30678 774 | 772,30636 775 | 773,30636 776 | 774,30624 777 | 775,30624 778 | 776,30563 779 | 777,30563 780 | 778,30563 781 | 779,30563 782 | 780,30563 783 | 781,30563 784 | 782,30563 785 | 783,30559 786 | 784,30559 787 | 785,30545 788 | 786,30545 789 | 787,30545 790 | 788,30545 791 | 789,30545 792 | 790,30539 793 | 791,30539 794 | 792,30539 795 | 793,30539 796 | 794,30539 797 | 795,30539 798 | 796,30539 799 | 797,30514 800 | 798,30514 801 | 799,30510 802 | 800,30498 803 | 801,30494 804 | 802,30494 805 | 803,30473 806 | 804,30466 807 | 805,30466 808 | 806,30466 809 | 807,30436 810 | 808,30304 811 | 809,30304 812 | 810,30234 813 | 811,30234 814 | 812,30234 815 | 813,30234 816 | 814,30178 817 | 815,30178 818 | 816,30178 819 | 817,30178 820 | 818,30178 821 | 819,30178 822 | 820,30178 823 | 821,30178 824 | 822,30150 825 | 823,30144 826 | 824,30144 827 | 825,30114 828 | 826,30114 829 | 827,30102 830 | 828,30048 831 | 829,30038 832 | 830,30038 833 | 831,29867 834 | 832,29867 835 | 833,29867 836 | 834,29867 837 | 835,29855 838 | 836,29855 839 | 837,29855 840 | 838,29855 841 | 839,29781 842 | 840,29781 843 | 841,29781 844 | 842,29757 845 | 843,29757 846 | 844,29739 847 | 845,29739 848 | 846,29729 849 | 847,29729 850 | 848,29729 851 | 849,29657 852 | 850,29657 853 | 851,29657 854 | 852,29641 855 | 853,29641 856 | 854,29641 857 | 855,29641 858 | 856,29636 859 | 857,29636 860 | 858,29634 861 | 859,29634 862 | 860,29634 863 | 861,29634 864 | 862,29634 865 | 863,29616 866 | 864,29546 867 | 865,29546 868 | 866,29546 869 | 867,29546 870 | 868,29546 871 | 869,29546 872 | 870,29546 873 | 871,29546 874 | 872,29546 875 | 873,29546 876 | 874,29543 877 | 875,29543 878 | 876,29493 879 | 877,29493 880 | 878,29493 881 | 879,29389 882 | 880,29389 883 | 881,29389 884 | 882,29389 885 | 883,29389 886 | 884,29389 887 | 885,29379 888 | 886,29379 889 | 887,29315 890 | 888,29307 891 | 889,29307 892 | 890,29307 893 | 891,29307 894 | 892,29307 895 | 893,29307 896 | 894,29304 897 | 895,29253 898 | 896,29229 899 | 897,29229 900 | 898,29208 901 | 899,29208 902 | 900,29208 903 | 901,29208 904 | 902,29175 905 | 903,29169 906 | 904,29169 907 | 905,29169 908 | 906,29169 909 | 907,29169 910 | 908,29169 911 | 909,29169 912 | 910,29169 913 | 911,29169 914 | 912,29169 915 | 913,29169 916 | 914,29169 917 | 915,29169 918 | 916,29169 919 | 917,29169 920 | 918,29169 921 | 919,29169 922 | 920,29169 923 | 921,29169 924 | 922,29169 925 | 923,29169 926 | 924,29169 927 | 925,29169 928 | 926,29169 929 | 927,29169 930 | 928,29152 931 | 929,29074 932 | 930,29056 933 | 931,29006 934 | 932,29006 935 | 933,29006 936 | 934,28962 937 | 935,28952 938 | 936,28952 939 | 937,28952 940 | 938,28922 941 | 939,28922 942 | 940,28842 943 | 941,28788 944 | 942,28788 945 | 943,28788 946 | 944,28788 947 | 945,28788 948 | 946,28788 949 | 947,28788 950 | 948,28760 951 | 949,28760 952 | 950,28760 953 | 951,28760 954 | 952,28760 955 | 953,28760 956 | 954,28760 957 | 955,28760 958 | 956,28760 959 | 957,28760 960 | 958,28711 961 | 959,28707 962 | 960,28635 963 | 961,28632 964 | 962,28614 965 | 963,28614 966 | 964,28614 967 | 965,28614 968 | 966,28614 969 | 967,28614 970 | 968,28614 971 | 969,28614 972 | 970,28614 973 | 971,28614 974 | 972,28608 975 | 973,28606 976 | 974,28606 977 | 975,28606 978 | 976,28606 979 | 977,28606 980 | 978,28596 981 | 979,28596 982 | 980,28596 983 | 981,28562 984 | 982,28562 985 | 983,28562 986 | 984,28554 987 | 985,28554 988 | 986,28554 989 | 987,28554 990 | 988,28554 991 | 989,28554 992 | 990,28554 993 | 991,28554 994 | 992,28554 995 | 993,28554 996 | 994,28552 997 | 995,28494 998 | 996,28494 999 | 997,28494 1000 | 998,28423 1001 | 999,28423 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_4.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79066 4 | 2,78842 5 | 3,78630 6 | 4,78622 7 | 5,78523 8 | 6,78170 9 | 7,77989 10 | 8,77987 11 | 9,77895 12 | 10,77565 13 | 11,77462 14 | 12,77329 15 | 13,77147 16 | 14,76991 17 | 15,76747 18 | 16,76585 19 | 17,76366 20 | 18,76112 21 | 19,75970 22 | 20,75884 23 | 21,75872 24 | 22,75754 25 | 23,75571 26 | 24,75545 27 | 25,75545 28 | 26,75529 29 | 27,75280 30 | 28,75173 31 | 29,74875 32 | 30,74705 33 | 31,74613 34 | 32,74607 35 | 33,74400 36 | 34,74208 37 | 35,73987 38 | 36,73909 39 | 37,73809 40 | 38,73729 41 | 39,73409 42 | 40,73291 43 | 41,73111 44 | 42,73085 45 | 43,72979 46 | 44,72741 47 | 45,72634 48 | 46,72552 49 | 47,72481 50 | 48,72443 51 | 49,72307 52 | 50,72089 53 | 51,71907 54 | 52,71795 55 | 53,71695 56 | 54,71415 57 | 55,71279 58 | 56,71199 59 | 57,70941 60 | 58,70823 61 | 59,70755 62 | 60,70601 63 | 61,70511 64 | 62,70453 65 | 63,70226 66 | 64,70016 67 | 65,69936 68 | 66,69930 69 | 67,69823 70 | 68,69695 71 | 69,69675 72 | 70,69625 73 | 71,69441 74 | 72,69372 75 | 73,69118 76 | 74,68879 77 | 75,68705 78 | 76,68521 79 | 77,68376 80 | 78,68234 81 | 79,68074 82 | 80,68074 83 | 81,67835 84 | 82,67780 85 | 83,67771 86 | 84,67627 87 | 85,67373 88 | 86,67187 89 | 87,67177 90 | 88,67174 91 | 89,67098 92 | 90,66876 93 | 91,66742 94 | 92,66419 95 | 93,66393 96 | 94,66361 97 | 95,66309 98 | 96,66181 99 | 97,66181 100 | 98,66019 101 | 99,65985 102 | 100,65795 103 | 101,65664 104 | 102,65572 105 | 103,65466 106 | 104,65084 107 | 105,64902 108 | 106,64900 109 | 107,64850 110 | 108,64696 111 | 109,64696 112 | 110,64500 113 | 111,64342 114 | 112,64158 115 | 113,63808 116 | 114,63380 117 | 115,63178 118 | 116,63100 119 | 117,63092 120 | 118,62962 121 | 119,62820 122 | 120,62687 123 | 121,62573 124 | 122,62422 125 | 123,62418 126 | 124,62382 127 | 125,62344 128 | 126,62202 129 | 127,62202 130 | 128,62202 131 | 129,62186 132 | 130,62154 133 | 131,61904 134 | 132,61904 135 | 133,61802 136 | 134,61638 137 | 135,61445 138 | 136,61329 139 | 137,61100 140 | 138,60936 141 | 139,60744 142 | 140,60609 143 | 141,60587 144 | 142,60395 145 | 143,60299 146 | 144,60177 147 | 145,60177 148 | 146,60067 149 | 147,59753 150 | 148,59481 151 | 149,59427 152 | 150,59401 153 | 151,59324 154 | 152,59324 155 | 153,58978 156 | 154,58968 157 | 155,58952 158 | 156,58639 159 | 157,58463 160 | 158,58463 161 | 159,58463 162 | 160,58375 163 | 161,58127 164 | 162,58001 165 | 163,58001 166 | 164,57911 167 | 165,57689 168 | 166,57571 169 | 167,57447 170 | 168,57439 171 | 169,57279 172 | 170,57231 173 | 171,57160 174 | 172,57068 175 | 173,56945 176 | 174,56945 177 | 175,56945 178 | 176,56576 179 | 177,56576 180 | 178,56514 181 | 179,56514 182 | 180,56395 183 | 181,56268 184 | 182,56124 185 | 183,56070 186 | 184,56070 187 | 185,55935 188 | 186,55809 189 | 187,55809 190 | 188,55568 191 | 189,55433 192 | 190,55267 193 | 191,55253 194 | 192,55205 195 | 193,55029 196 | 194,54792 197 | 195,54762 198 | 196,54762 199 | 197,54602 200 | 198,54580 201 | 199,54494 202 | 200,54238 203 | 201,53594 204 | 202,53132 205 | 203,53132 206 | 204,53132 207 | 205,53080 208 | 206,52916 209 | 207,52916 210 | 208,52913 211 | 209,52693 212 | 210,52572 213 | 211,52572 214 | 212,52302 215 | 213,52161 216 | 214,52161 217 | 215,52115 218 | 216,51907 219 | 217,51888 220 | 218,51847 221 | 219,51847 222 | 220,51833 223 | 221,51833 224 | 222,51771 225 | 223,51771 226 | 224,51743 227 | 225,51596 228 | 226,51596 229 | 227,51586 230 | 228,51586 231 | 229,51384 232 | 230,51252 233 | 231,51082 234 | 232,50722 235 | 233,50722 236 | 234,50661 237 | 235,50661 238 | 236,50245 239 | 237,50245 240 | 238,50245 241 | 239,50201 242 | 240,50142 243 | 241,50142 244 | 242,50030 245 | 243,49984 246 | 244,49924 247 | 245,49912 248 | 246,49761 249 | 247,49761 250 | 248,49761 251 | 249,49678 252 | 250,49678 253 | 251,49678 254 | 252,49572 255 | 253,49480 256 | 254,49480 257 | 255,49480 258 | 256,49480 259 | 257,49439 260 | 258,49383 261 | 259,49131 262 | 260,49131 263 | 261,49119 264 | 262,49119 265 | 263,49119 266 | 264,48991 267 | 265,48891 268 | 266,48685 269 | 267,48670 270 | 268,48670 271 | 269,48670 272 | 270,48610 273 | 271,48610 274 | 272,48445 275 | 273,48365 276 | 274,48365 277 | 275,48365 278 | 276,48227 279 | 277,48167 280 | 278,47983 281 | 279,47943 282 | 280,47325 283 | 281,47325 284 | 282,47325 285 | 283,47315 286 | 284,47297 287 | 285,47297 288 | 286,46933 289 | 287,46929 290 | 288,46929 291 | 289,46818 292 | 290,46818 293 | 291,46572 294 | 292,46572 295 | 293,46546 296 | 294,46546 297 | 295,46506 298 | 296,46506 299 | 297,46368 300 | 298,46368 301 | 299,46368 302 | 300,46364 303 | 301,46340 304 | 302,46340 305 | 303,46316 306 | 304,46302 307 | 305,46302 308 | 306,46253 309 | 307,46193 310 | 308,46193 311 | 309,45867 312 | 310,45867 313 | 311,45849 314 | 312,45846 315 | 313,45652 316 | 314,45652 317 | 315,45652 318 | 316,45652 319 | 317,45452 320 | 318,45452 321 | 319,45416 322 | 320,45416 323 | 321,45416 324 | 322,45416 325 | 323,45391 326 | 324,45094 327 | 325,45094 328 | 326,45094 329 | 327,45094 330 | 328,45094 331 | 329,45094 332 | 330,45059 333 | 331,45001 334 | 332,44935 335 | 333,44802 336 | 334,44802 337 | 335,44802 338 | 336,44780 339 | 337,44779 340 | 338,44779 341 | 339,44779 342 | 340,44715 343 | 341,44696 344 | 342,44696 345 | 343,44476 346 | 344,44448 347 | 345,44410 348 | 346,44204 349 | 347,44204 350 | 348,44188 351 | 349,44018 352 | 350,43941 353 | 351,43941 354 | 352,43941 355 | 353,43924 356 | 354,43872 357 | 355,43767 358 | 356,43699 359 | 357,43699 360 | 358,43662 361 | 359,43662 362 | 360,43662 363 | 361,43662 364 | 362,43592 365 | 363,43430 366 | 364,43430 367 | 365,43414 368 | 366,43414 369 | 367,43403 370 | 368,43284 371 | 369,43284 372 | 370,43283 373 | 371,43164 374 | 372,43164 375 | 373,43026 376 | 374,42842 377 | 375,42741 378 | 376,42741 379 | 377,42708 380 | 378,42684 381 | 379,42673 382 | 380,42461 383 | 381,42419 384 | 382,42419 385 | 383,42365 386 | 384,42365 387 | 385,42365 388 | 386,41971 389 | 387,41951 390 | 388,41951 391 | 389,41599 392 | 390,41599 393 | 391,41523 394 | 392,41463 395 | 393,41354 396 | 394,41312 397 | 395,41276 398 | 396,41205 399 | 397,41205 400 | 398,41113 401 | 399,41061 402 | 400,41061 403 | 401,41041 404 | 402,40825 405 | 403,40822 406 | 404,40822 407 | 405,40798 408 | 406,40796 409 | 407,40794 410 | 408,40794 411 | 409,40694 412 | 410,40694 413 | 411,40694 414 | 412,40532 415 | 413,40514 416 | 414,40501 417 | 415,40501 418 | 416,40493 419 | 417,40319 420 | 418,40319 421 | 419,40304 422 | 420,40304 423 | 421,40304 424 | 422,40298 425 | 423,40292 426 | 424,40292 427 | 425,40292 428 | 426,40292 429 | 427,40283 430 | 428,40283 431 | 429,40283 432 | 430,40231 433 | 431,40231 434 | 432,40231 435 | 433,40231 436 | 434,40229 437 | 435,40229 438 | 436,40180 439 | 437,40180 440 | 438,40120 441 | 439,40120 442 | 440,40120 443 | 441,40090 444 | 442,40086 445 | 443,40086 446 | 444,40086 447 | 445,40086 448 | 446,40086 449 | 447,40046 450 | 448,40016 451 | 449,40016 452 | 450,40016 453 | 451,40012 454 | 452,39998 455 | 453,39764 456 | 454,39764 457 | 455,39764 458 | 456,39764 459 | 457,39758 460 | 458,39758 461 | 459,39614 462 | 460,39563 463 | 461,39563 464 | 462,39563 465 | 463,39563 466 | 464,39561 467 | 465,39463 468 | 466,39385 469 | 467,39230 470 | 468,39212 471 | 469,39212 472 | 470,39188 473 | 471,39139 474 | 472,39133 475 | 473,39103 476 | 474,39103 477 | 475,39103 478 | 476,39027 479 | 477,39027 480 | 478,39013 481 | 479,38985 482 | 480,38863 483 | 481,38857 484 | 482,38857 485 | 483,38857 486 | 484,38857 487 | 485,38825 488 | 486,38825 489 | 487,38815 490 | 488,38815 491 | 489,38815 492 | 490,38747 493 | 491,38617 494 | 492,38617 495 | 493,38617 496 | 494,38615 497 | 495,38615 498 | 496,38576 499 | 497,38576 500 | 498,38576 501 | 499,38576 502 | 500,38516 503 | 501,38424 504 | 502,38400 505 | 503,38400 506 | 504,38400 507 | 505,38396 508 | 506,38320 509 | 507,38304 510 | 508,38147 511 | 509,38001 512 | 510,37973 513 | 511,37973 514 | 512,37875 515 | 513,37875 516 | 514,37737 517 | 515,37737 518 | 516,37737 519 | 517,37737 520 | 518,37737 521 | 519,37705 522 | 520,37705 523 | 521,37699 524 | 522,37612 525 | 523,37612 526 | 524,37612 527 | 525,37612 528 | 526,37514 529 | 527,37514 530 | 528,37512 531 | 529,37502 532 | 530,37378 533 | 531,37378 534 | 532,37378 535 | 533,37372 536 | 534,37372 537 | 535,37372 538 | 536,37372 539 | 537,37372 540 | 538,37372 541 | 539,37372 542 | 540,37372 543 | 541,37294 544 | 542,37294 545 | 543,37294 546 | 544,37167 547 | 545,37073 548 | 546,37073 549 | 547,36951 550 | 548,36951 551 | 549,36951 552 | 550,36935 553 | 551,36922 554 | 552,36922 555 | 553,36810 556 | 554,36810 557 | 555,36756 558 | 556,36756 559 | 557,36752 560 | 558,36752 561 | 559,36752 562 | 560,36752 563 | 561,36752 564 | 562,36527 565 | 563,36527 566 | 564,36527 567 | 565,36527 568 | 566,36527 569 | 567,36477 570 | 568,36477 571 | 569,36477 572 | 570,36473 573 | 571,36392 574 | 572,36378 575 | 573,36378 576 | 574,36366 577 | 575,36366 578 | 576,36366 579 | 577,36313 580 | 578,36238 581 | 579,36222 582 | 580,36222 583 | 581,36102 584 | 582,36102 585 | 583,36095 586 | 584,36089 587 | 585,36089 588 | 586,36088 589 | 587,36088 590 | 588,36088 591 | 589,36077 592 | 590,36077 593 | 591,36077 594 | 592,36077 595 | 593,35980 596 | 594,35980 597 | 595,35980 598 | 596,35980 599 | 597,35980 600 | 598,35980 601 | 599,35788 602 | 600,35785 603 | 601,35785 604 | 602,35768 605 | 603,35752 606 | 604,35752 607 | 605,35752 608 | 606,35752 609 | 607,35706 610 | 608,35700 611 | 609,35700 612 | 610,35700 613 | 611,35700 614 | 612,35700 615 | 613,35670 616 | 614,35670 617 | 615,35670 618 | 616,35670 619 | 617,35567 620 | 618,35567 621 | 619,35567 622 | 620,35525 623 | 621,35525 624 | 622,35426 625 | 623,35417 626 | 624,35417 627 | 625,35417 628 | 626,35417 629 | 627,35417 630 | 628,35417 631 | 629,35362 632 | 630,35331 633 | 631,35331 634 | 632,35331 635 | 633,35331 636 | 634,35321 637 | 635,35321 638 | 636,35321 639 | 637,35321 640 | 638,35321 641 | 639,35321 642 | 640,35179 643 | 641,35177 644 | 642,35161 645 | 643,35156 646 | 644,35156 647 | 645,35152 648 | 646,34986 649 | 647,34982 650 | 648,34982 651 | 649,34982 652 | 650,34982 653 | 651,34982 654 | 652,34982 655 | 653,34982 656 | 654,34958 657 | 655,34958 658 | 656,34958 659 | 657,34958 660 | 658,34958 661 | 659,34853 662 | 660,34853 663 | 661,34831 664 | 662,34831 665 | 663,34825 666 | 664,34753 667 | 665,34753 668 | 666,34753 669 | 667,34753 670 | 668,34753 671 | 669,34637 672 | 670,34585 673 | 671,34545 674 | 672,34545 675 | 673,34534 676 | 674,34492 677 | 675,34486 678 | 676,34485 679 | 677,34350 680 | 678,34350 681 | 679,34350 682 | 680,34350 683 | 681,34306 684 | 682,34306 685 | 683,34270 686 | 684,34270 687 | 685,34270 688 | 686,34270 689 | 687,34260 690 | 688,34240 691 | 689,34240 692 | 690,34240 693 | 691,34240 694 | 692,34240 695 | 693,34240 696 | 694,34238 697 | 695,34238 698 | 696,34236 699 | 697,34094 700 | 698,34078 701 | 699,34078 702 | 700,34078 703 | 701,34054 704 | 702,34014 705 | 703,34014 706 | 704,34014 707 | 705,34014 708 | 706,34014 709 | 707,34014 710 | 708,33988 711 | 709,33962 712 | 710,33949 713 | 711,33949 714 | 712,33949 715 | 713,33949 716 | 714,33949 717 | 715,33949 718 | 716,33949 719 | 717,33949 720 | 718,33941 721 | 719,33941 722 | 720,33941 723 | 721,33941 724 | 722,33874 725 | 723,33874 726 | 724,33874 727 | 725,33630 728 | 726,33615 729 | 727,33615 730 | 728,33563 731 | 729,33563 732 | 730,33563 733 | 731,33497 734 | 732,33497 735 | 733,33497 736 | 734,33497 737 | 735,33493 738 | 736,33457 739 | 737,33431 740 | 738,33431 741 | 739,33401 742 | 740,33312 743 | 741,33200 744 | 742,33199 745 | 743,33199 746 | 744,33148 747 | 745,33136 748 | 746,33058 749 | 747,33041 750 | 748,33041 751 | 749,33041 752 | 750,33041 753 | 751,33041 754 | 752,33041 755 | 753,33041 756 | 754,33027 757 | 755,33027 758 | 756,32981 759 | 757,32981 760 | 758,32981 761 | 759,32905 762 | 760,32905 763 | 761,32899 764 | 762,32899 765 | 763,32899 766 | 764,32883 767 | 765,32883 768 | 766,32883 769 | 767,32883 770 | 768,32883 771 | 769,32883 772 | 770,32859 773 | 771,32859 774 | 772,32803 775 | 773,32803 776 | 774,32803 777 | 775,32803 778 | 776,32803 779 | 777,32803 780 | 778,32803 781 | 779,32803 782 | 780,32803 783 | 781,32761 784 | 782,32761 785 | 783,32761 786 | 784,32761 787 | 785,32761 788 | 786,32761 789 | 787,32737 790 | 788,32696 791 | 789,32662 792 | 790,32662 793 | 791,32662 794 | 792,32638 795 | 793,32638 796 | 794,32635 797 | 795,32635 798 | 796,32603 799 | 797,32603 800 | 798,32599 801 | 799,32599 802 | 800,32599 803 | 801,32561 804 | 802,32561 805 | 803,32561 806 | 804,32558 807 | 805,32555 808 | 806,32555 809 | 807,32555 810 | 808,32555 811 | 809,32555 812 | 810,32555 813 | 811,32555 814 | 812,32555 815 | 813,32555 816 | 814,32545 817 | 815,32545 818 | 816,32461 819 | 817,32461 820 | 818,32461 821 | 819,32451 822 | 820,32451 823 | 821,32399 824 | 822,32399 825 | 823,32399 826 | 824,32399 827 | 825,32399 828 | 826,32399 829 | 827,32399 830 | 828,32399 831 | 829,32399 832 | 830,32391 833 | 831,32388 834 | 832,32388 835 | 833,32388 836 | 834,32388 837 | 835,32276 838 | 836,32276 839 | 837,32108 840 | 838,32102 841 | 839,32084 842 | 840,32084 843 | 841,32084 844 | 842,32084 845 | 843,32084 846 | 844,32084 847 | 845,31946 848 | 846,31946 849 | 847,31946 850 | 848,31946 851 | 849,31930 852 | 850,31930 853 | 851,31930 854 | 852,31930 855 | 853,31858 856 | 854,31800 857 | 855,31800 858 | 856,31800 859 | 857,31788 860 | 858,31788 861 | 859,31788 862 | 860,31788 863 | 861,31788 864 | 862,31788 865 | 863,31784 866 | 864,31784 867 | 865,31784 868 | 866,31784 869 | 867,31784 870 | 868,31760 871 | 869,31760 872 | 870,31760 873 | 871,31760 874 | 872,31760 875 | 873,31749 876 | 874,31749 877 | 875,31749 878 | 876,31749 879 | 877,31749 880 | 878,31733 881 | 879,31733 882 | 880,31733 883 | 881,31733 884 | 882,31726 885 | 883,31655 886 | 884,31570 887 | 885,31550 888 | 886,31538 889 | 887,31538 890 | 888,31538 891 | 889,31538 892 | 890,31403 893 | 891,31351 894 | 892,31316 895 | 893,31282 896 | 894,31262 897 | 895,31262 898 | 896,31262 899 | 897,31262 900 | 898,31262 901 | 899,31262 902 | 900,31262 903 | 901,31262 904 | 902,31262 905 | 903,31243 906 | 904,31243 907 | 905,31243 908 | 906,31219 909 | 907,31219 910 | 908,31219 911 | 909,31218 912 | 910,31218 913 | 911,31218 914 | 912,31206 915 | 913,31202 916 | 914,31172 917 | 915,31172 918 | 916,31172 919 | 917,31172 920 | 918,31172 921 | 919,31169 922 | 920,31169 923 | 921,31169 924 | 922,31132 925 | 923,31074 926 | 924,31074 927 | 925,31074 928 | 926,31074 929 | 927,31074 930 | 928,31074 931 | 929,31011 932 | 930,31011 933 | 931,31011 934 | 932,31011 935 | 933,31011 936 | 934,31011 937 | 935,31011 938 | 936,31011 939 | 937,31011 940 | 938,30997 941 | 939,30997 942 | 940,30997 943 | 941,30997 944 | 942,30997 945 | 943,30997 946 | 944,30997 947 | 945,30997 948 | 946,30997 949 | 947,30997 950 | 948,30997 951 | 949,30997 952 | 950,30997 953 | 951,30997 954 | 952,30997 955 | 953,30997 956 | 954,30997 957 | 955,30997 958 | 956,30997 959 | 957,30997 960 | 958,30987 961 | 959,30987 962 | 960,30987 963 | 961,30987 964 | 962,30987 965 | 963,30987 966 | 964,30987 967 | 965,30987 968 | 966,30987 969 | 967,30987 970 | 968,30977 971 | 969,30977 972 | 970,30977 973 | 971,30977 974 | 972,30977 975 | 973,30977 976 | 974,30977 977 | 975,30977 978 | 976,30977 979 | 977,30977 980 | 978,30977 981 | 979,30977 982 | 980,30916 983 | 981,30802 984 | 982,30802 985 | 983,30802 986 | 984,30802 987 | 985,30802 988 | 986,30802 989 | 987,30802 990 | 988,30802 991 | 989,30802 992 | 990,30794 993 | 991,30788 994 | 992,30784 995 | 993,30764 996 | 994,30764 997 | 995,30764 998 | 996,30764 999 | 997,30764 1000 | 998,30764 1001 | 999,30764 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_64.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79002 4 | 2,78888 5 | 3,78798 6 | 4,78576 7 | 5,78361 8 | 6,78147 9 | 7,78005 10 | 8,77825 11 | 9,77612 12 | 10,77374 13 | 11,77014 14 | 12,76966 15 | 13,76792 16 | 14,76432 17 | 15,76354 18 | 16,76268 19 | 17,75798 20 | 18,75704 21 | 19,75452 22 | 20,75234 23 | 21,75007 24 | 22,74735 25 | 23,74543 26 | 24,74401 27 | 25,74252 28 | 26,74246 29 | 27,74228 30 | 28,73946 31 | 29,73814 32 | 30,73648 33 | 31,73381 34 | 32,73123 35 | 33,72869 36 | 34,72773 37 | 35,72773 38 | 36,72705 39 | 37,72507 40 | 38,72301 41 | 39,72241 42 | 40,72147 43 | 41,71973 44 | 42,71905 45 | 43,71855 46 | 44,71744 47 | 45,71676 48 | 46,71516 49 | 47,71394 50 | 48,71206 51 | 49,71147 52 | 50,71147 53 | 51,71027 54 | 52,71012 55 | 53,70997 56 | 54,70685 57 | 55,70661 58 | 56,70611 59 | 57,70452 60 | 58,70294 61 | 59,70168 62 | 60,70143 63 | 61,69878 64 | 62,69878 65 | 63,69728 66 | 64,69546 67 | 65,69546 68 | 66,69486 69 | 67,69250 70 | 68,69104 71 | 69,68908 72 | 70,68908 73 | 71,68754 74 | 72,68348 75 | 73,68200 76 | 74,68112 77 | 75,68112 78 | 76,68070 79 | 77,67951 80 | 78,67925 81 | 79,67831 82 | 80,67801 83 | 81,67769 84 | 82,67553 85 | 83,67525 86 | 84,67479 87 | 85,67379 88 | 86,67061 89 | 87,66861 90 | 88,66808 91 | 89,66748 92 | 90,66570 93 | 91,66550 94 | 92,66212 95 | 93,66146 96 | 94,66060 97 | 95,65924 98 | 96,65906 99 | 97,65702 100 | 98,65621 101 | 99,65317 102 | 100,65298 103 | 101,65298 104 | 102,65166 105 | 103,64978 106 | 104,64696 107 | 105,64592 108 | 106,64592 109 | 107,64548 110 | 108,64504 111 | 109,64337 112 | 110,64258 113 | 111,64071 114 | 112,64071 115 | 113,64069 116 | 114,63911 117 | 115,63779 118 | 116,63679 119 | 117,63679 120 | 118,63679 121 | 119,63591 122 | 120,63509 123 | 121,63461 124 | 122,63334 125 | 123,63334 126 | 124,63010 127 | 125,62640 128 | 126,62640 129 | 127,62567 130 | 128,62567 131 | 129,62478 132 | 130,62214 133 | 131,62202 134 | 132,62080 135 | 133,62068 136 | 134,61975 137 | 135,61975 138 | 136,61939 139 | 137,61933 140 | 138,61933 141 | 139,61799 142 | 140,61733 143 | 141,61549 144 | 142,61349 145 | 143,61314 146 | 144,61195 147 | 145,61193 148 | 146,61079 149 | 147,60953 150 | 148,60757 151 | 149,60521 152 | 150,60466 153 | 151,60250 154 | 152,60236 155 | 153,60082 156 | 154,60082 157 | 155,60028 158 | 156,59925 159 | 157,59839 160 | 158,59621 161 | 159,59441 162 | 160,59373 163 | 161,59358 164 | 162,59293 165 | 163,59205 166 | 164,59195 167 | 165,58920 168 | 166,58858 169 | 167,58788 170 | 168,58213 171 | 169,58209 172 | 170,58209 173 | 171,58021 174 | 172,57944 175 | 173,57864 176 | 174,57815 177 | 175,57743 178 | 176,57569 179 | 177,57569 180 | 178,57427 181 | 179,57265 182 | 180,57131 183 | 181,57053 184 | 182,56949 185 | 183,56949 186 | 184,56660 187 | 185,56576 188 | 186,56563 189 | 187,56563 190 | 188,56459 191 | 189,56431 192 | 190,56239 193 | 191,56181 194 | 192,56181 195 | 193,56175 196 | 194,56115 197 | 195,55995 198 | 196,55862 199 | 197,55798 200 | 198,55650 201 | 199,55650 202 | 200,55525 203 | 201,55392 204 | 202,55289 205 | 203,55289 206 | 204,55289 207 | 205,55289 208 | 206,55272 209 | 207,55272 210 | 208,55181 211 | 209,55103 212 | 210,55103 213 | 211,54968 214 | 212,54845 215 | 213,54749 216 | 214,54731 217 | 215,54459 218 | 216,54359 219 | 217,54359 220 | 218,54349 221 | 219,54195 222 | 220,54084 223 | 221,54020 224 | 222,53860 225 | 223,53692 226 | 224,53625 227 | 225,53281 228 | 226,53269 229 | 227,53236 230 | 228,53000 231 | 229,52746 232 | 230,52743 233 | 231,52703 234 | 232,52623 235 | 233,52557 236 | 234,52451 237 | 235,52451 238 | 236,52305 239 | 237,52260 240 | 238,52260 241 | 239,52140 242 | 240,52064 243 | 241,52034 244 | 242,52034 245 | 243,52034 246 | 244,52034 247 | 245,51812 248 | 246,51802 249 | 247,51317 250 | 248,51219 251 | 249,50939 252 | 250,50837 253 | 251,50673 254 | 252,50673 255 | 253,50673 256 | 254,50655 257 | 255,50639 258 | 256,50590 259 | 257,50590 260 | 258,50315 261 | 259,50315 262 | 260,50083 263 | 261,50083 264 | 262,50083 265 | 263,49995 266 | 264,49895 267 | 265,49892 268 | 266,49892 269 | 267,49886 270 | 268,49866 271 | 269,49770 272 | 270,49452 273 | 271,49350 274 | 272,49350 275 | 273,49191 276 | 274,49179 277 | 275,49083 278 | 276,49049 279 | 277,48995 280 | 278,48995 281 | 279,48976 282 | 280,48812 283 | 281,48812 284 | 282,48798 285 | 283,48697 286 | 284,48697 287 | 285,48697 288 | 286,48509 289 | 287,48202 290 | 288,48202 291 | 289,48194 292 | 290,48112 293 | 291,47838 294 | 292,47838 295 | 293,47572 296 | 294,47520 297 | 295,47506 298 | 296,47360 299 | 297,47360 300 | 298,47304 301 | 299,47234 302 | 300,47216 303 | 301,47207 304 | 302,47207 305 | 303,47207 306 | 304,46797 307 | 305,46701 308 | 306,46679 309 | 307,46439 310 | 308,46439 311 | 309,46434 312 | 310,46434 313 | 311,46418 314 | 312,46408 315 | 313,46408 316 | 314,46408 317 | 315,46396 318 | 316,46320 319 | 317,46320 320 | 318,46316 321 | 319,46316 322 | 320,46316 323 | 321,46190 324 | 322,45844 325 | 323,45642 326 | 324,45642 327 | 325,45612 328 | 326,45612 329 | 327,45506 330 | 328,45506 331 | 329,45506 332 | 330,45506 333 | 331,45506 334 | 332,45506 335 | 333,45503 336 | 334,45411 337 | 335,45403 338 | 336,45253 339 | 337,45220 340 | 338,45220 341 | 339,45220 342 | 340,45220 343 | 341,45008 344 | 342,44919 345 | 343,44919 346 | 344,44919 347 | 345,44919 348 | 346,44907 349 | 347,44809 350 | 348,44795 351 | 349,44795 352 | 350,44795 353 | 351,44792 354 | 352,44792 355 | 353,44758 356 | 354,44522 357 | 355,44522 358 | 356,44468 359 | 357,44468 360 | 358,44347 361 | 359,44347 362 | 360,44347 363 | 361,44347 364 | 362,44099 365 | 363,44099 366 | 364,44099 367 | 365,44099 368 | 366,44099 369 | 367,44099 370 | 368,43802 371 | 369,43802 372 | 370,43802 373 | 371,43780 374 | 372,43772 375 | 373,43770 376 | 374,43770 377 | 375,43770 378 | 376,43770 379 | 377,43765 380 | 378,43709 381 | 379,43709 382 | 380,43413 383 | 381,43413 384 | 382,43407 385 | 383,43407 386 | 384,43400 387 | 385,43338 388 | 386,43336 389 | 387,43304 390 | 388,43304 391 | 389,43272 392 | 390,43161 393 | 391,43157 394 | 392,43157 395 | 393,43037 396 | 394,43037 397 | 395,43009 398 | 396,42855 399 | 397,42840 400 | 398,42840 401 | 399,42840 402 | 400,42816 403 | 401,42816 404 | 402,42816 405 | 403,42816 406 | 404,42812 407 | 405,42812 408 | 406,42766 409 | 407,42710 410 | 408,42710 411 | 409,42611 412 | 410,42583 413 | 411,42583 414 | 412,42552 415 | 413,42552 416 | 414,42552 417 | 415,42552 418 | 416,42552 419 | 417,42552 420 | 418,42552 421 | 419,42544 422 | 420,42472 423 | 421,42448 424 | 422,42312 425 | 423,42312 426 | 424,42278 427 | 425,42278 428 | 426,42278 429 | 427,42278 430 | 428,42203 431 | 429,42147 432 | 430,42123 433 | 431,42117 434 | 432,42117 435 | 433,42117 436 | 434,42117 437 | 435,42117 438 | 436,42031 439 | 437,42025 440 | 438,42025 441 | 439,41997 442 | 440,41803 443 | 441,41783 444 | 442,41783 445 | 443,41744 446 | 444,41422 447 | 445,41422 448 | 446,41236 449 | 447,41236 450 | 448,41085 451 | 449,41085 452 | 450,41085 453 | 451,41085 454 | 452,41085 455 | 453,40893 456 | 454,40701 457 | 455,40701 458 | 456,40611 459 | 457,40611 460 | 458,40611 461 | 459,40538 462 | 460,40528 463 | 461,40528 464 | 462,40528 465 | 463,40516 466 | 464,40516 467 | 465,40482 468 | 466,40406 469 | 467,40400 470 | 468,40400 471 | 469,40367 472 | 470,40329 473 | 471,40311 474 | 472,40131 475 | 473,40131 476 | 474,40131 477 | 475,40131 478 | 476,39959 479 | 477,39959 480 | 478,39959 481 | 479,39941 482 | 480,39941 483 | 481,39941 484 | 482,39941 485 | 483,39891 486 | 484,39887 487 | 485,39859 488 | 486,39859 489 | 487,39859 490 | 488,39859 491 | 489,39852 492 | 490,39747 493 | 491,39718 494 | 492,39718 495 | 493,39664 496 | 494,39664 497 | 495,39357 498 | 496,39341 499 | 497,39122 500 | 498,39097 501 | 499,39097 502 | 500,38885 503 | 501,38818 504 | 502,38818 505 | 503,38818 506 | 504,38788 507 | 505,38706 508 | 506,38706 509 | 507,38706 510 | 508,38706 511 | 509,38706 512 | 510,38346 513 | 511,38328 514 | 512,38328 515 | 513,38304 516 | 514,38304 517 | 515,38205 518 | 516,38205 519 | 517,38151 520 | 518,38151 521 | 519,38151 522 | 520,38109 523 | 521,38105 524 | 522,38105 525 | 523,38105 526 | 524,38105 527 | 525,38083 528 | 526,38083 529 | 527,38083 530 | 528,38005 531 | 529,37991 532 | 530,37849 533 | 531,37849 534 | 532,37849 535 | 533,37821 536 | 534,37789 537 | 535,37747 538 | 536,37747 539 | 537,37741 540 | 538,37741 541 | 539,37741 542 | 540,37582 543 | 541,37515 544 | 542,37457 545 | 543,37395 546 | 544,37309 547 | 545,37309 548 | 546,37273 549 | 547,37273 550 | 548,37273 551 | 549,37271 552 | 550,37093 553 | 551,37093 554 | 552,37093 555 | 553,36987 556 | 554,36957 557 | 555,36957 558 | 556,36957 559 | 557,36957 560 | 558,36957 561 | 559,36841 562 | 560,36831 563 | 561,36756 564 | 562,36756 565 | 563,36756 566 | 564,36756 567 | 565,36756 568 | 566,36674 569 | 567,36662 570 | 568,36662 571 | 569,36636 572 | 570,36613 573 | 571,36581 574 | 572,36581 575 | 573,36581 576 | 574,36580 577 | 575,36580 578 | 576,36580 579 | 577,36552 580 | 578,36538 581 | 579,36529 582 | 580,36409 583 | 581,36363 584 | 582,36363 585 | 583,36363 586 | 584,36247 587 | 585,36247 588 | 586,36247 589 | 587,36195 590 | 588,36195 591 | 589,36195 592 | 590,35964 593 | 591,35962 594 | 592,35962 595 | 593,35927 596 | 594,35663 597 | 595,35663 598 | 596,35651 599 | 597,35651 600 | 598,35616 601 | 599,35616 602 | 600,35616 603 | 601,35549 604 | 602,35521 605 | 603,35491 606 | 604,35454 607 | 605,35302 608 | 606,35255 609 | 607,35147 610 | 608,35141 611 | 609,35141 612 | 610,35141 613 | 611,35141 614 | 612,35141 615 | 613,34998 616 | 614,34854 617 | 615,34787 618 | 616,34787 619 | 617,34779 620 | 618,34779 621 | 619,34578 622 | 620,34565 623 | 621,34565 624 | 622,34565 625 | 623,34565 626 | 624,34565 627 | 625,34565 628 | 626,34565 629 | 627,34557 630 | 628,34557 631 | 629,34521 632 | 630,34521 633 | 631,34521 634 | 632,34521 635 | 633,34521 636 | 634,34517 637 | 635,34517 638 | 636,34517 639 | 637,34517 640 | 638,34517 641 | 639,34501 642 | 640,34461 643 | 641,34461 644 | 642,34431 645 | 643,34431 646 | 644,34431 647 | 645,34416 648 | 646,34416 649 | 647,34408 650 | 648,34408 651 | 649,34408 652 | 650,34408 653 | 651,34408 654 | 652,34408 655 | 653,34384 656 | 654,34384 657 | 655,34384 658 | 656,34384 659 | 657,34384 660 | 658,34384 661 | 659,34384 662 | 660,34010 663 | 661,34010 664 | 662,33992 665 | 663,33992 666 | 664,33958 667 | 665,33958 668 | 666,33958 669 | 667,33958 670 | 668,33902 671 | 669,33902 672 | 670,33902 673 | 671,33880 674 | 672,33878 675 | 673,33854 676 | 674,33720 677 | 675,33662 678 | 676,33662 679 | 677,33432 680 | 678,33432 681 | 679,33432 682 | 680,33432 683 | 681,33364 684 | 682,33364 685 | 683,33364 686 | 684,33364 687 | 685,33364 688 | 686,33364 689 | 687,33364 690 | 688,33364 691 | 689,33298 692 | 690,33298 693 | 691,33298 694 | 692,33298 695 | 693,33264 696 | 694,33264 697 | 695,33264 698 | 696,33188 699 | 697,33182 700 | 698,33182 701 | 699,33182 702 | 700,33182 703 | 701,33182 704 | 702,33106 705 | 703,33106 706 | 704,33106 707 | 705,33106 708 | 706,33106 709 | 707,33106 710 | 708,33106 711 | 709,33106 712 | 710,33098 713 | 711,33098 714 | 712,33088 715 | 713,33088 716 | 714,33088 717 | 715,33088 718 | 716,33038 719 | 717,33038 720 | 718,33038 721 | 719,33038 722 | 720,33038 723 | 721,33038 724 | 722,33031 725 | 723,33031 726 | 724,33026 727 | 725,33026 728 | 726,33026 729 | 727,33026 730 | 728,33026 731 | 729,33026 732 | 730,33019 733 | 731,33019 734 | 732,33019 735 | 733,33019 736 | 734,33008 737 | 735,32994 738 | 736,32994 739 | 737,32934 740 | 738,32897 741 | 739,32785 742 | 740,32785 743 | 741,32785 744 | 742,32785 745 | 743,32597 746 | 744,32597 747 | 745,32597 748 | 746,32597 749 | 747,32597 750 | 748,32597 751 | 749,32597 752 | 750,32597 753 | 751,32597 754 | 752,32597 755 | 753,32597 756 | 754,32597 757 | 755,32597 758 | 756,32597 759 | 757,32597 760 | 758,32597 761 | 759,32597 762 | 760,32597 763 | 761,32597 764 | 762,32597 765 | 763,32597 766 | 764,32597 767 | 765,32595 768 | 766,32540 769 | 767,32540 770 | 768,32540 771 | 769,32540 772 | 770,32540 773 | 771,32536 774 | 772,32536 775 | 773,32213 776 | 774,32213 777 | 775,32213 778 | 776,32213 779 | 777,32205 780 | 778,32151 781 | 779,32113 782 | 780,32113 783 | 781,32113 784 | 782,32113 785 | 783,32113 786 | 784,31931 787 | 785,31931 788 | 786,31835 789 | 787,31835 790 | 788,31835 791 | 789,31835 792 | 790,31835 793 | 791,31829 794 | 792,31829 795 | 793,31829 796 | 794,31829 797 | 795,31829 798 | 796,31827 799 | 797,31827 800 | 798,31805 801 | 799,31805 802 | 800,31805 803 | 801,31805 804 | 802,31770 805 | 803,31766 806 | 804,31766 807 | 805,31732 808 | 806,31732 809 | 807,31574 810 | 808,31566 811 | 809,31565 812 | 810,31549 813 | 811,31549 814 | 812,31536 815 | 813,31526 816 | 814,31526 817 | 815,31484 818 | 816,31484 819 | 817,31484 820 | 818,31484 821 | 819,31484 822 | 820,31484 823 | 821,31484 824 | 822,31462 825 | 823,31462 826 | 824,31462 827 | 825,31462 828 | 826,31462 829 | 827,31462 830 | 828,31462 831 | 829,31462 832 | 830,31443 833 | 831,31443 834 | 832,31426 835 | 833,31426 836 | 834,31425 837 | 835,31425 838 | 836,31425 839 | 837,31415 840 | 838,31415 841 | 839,31409 842 | 840,31409 843 | 841,31409 844 | 842,31409 845 | 843,31409 846 | 844,31345 847 | 845,31345 848 | 846,31345 849 | 847,31345 850 | 848,31345 851 | 849,31342 852 | 850,31308 853 | 851,31308 854 | 852,31308 855 | 853,31308 856 | 854,31307 857 | 855,31307 858 | 856,31307 859 | 857,31283 860 | 858,31283 861 | 859,31277 862 | 860,31277 863 | 861,31277 864 | 862,31277 865 | 863,31277 866 | 864,31245 867 | 865,31245 868 | 866,31245 869 | 867,31245 870 | 868,31245 871 | 869,31245 872 | 870,31238 873 | 871,31238 874 | 872,31220 875 | 873,31220 876 | 874,31220 877 | 875,31158 878 | 876,31158 879 | 877,31126 880 | 878,31126 881 | 879,31126 882 | 880,31126 883 | 881,31124 884 | 882,31124 885 | 883,31124 886 | 884,31124 887 | 885,31124 888 | 886,31124 889 | 887,31124 890 | 888,31124 891 | 889,31124 892 | 890,31124 893 | 891,31124 894 | 892,31124 895 | 893,31124 896 | 894,31124 897 | 895,31124 898 | 896,31124 899 | 897,31124 900 | 898,31124 901 | 899,31124 902 | 900,31114 903 | 901,31114 904 | 902,31114 905 | 903,31114 906 | 904,31114 907 | 905,31114 908 | 906,31101 909 | 907,31101 910 | 908,31101 911 | 909,31101 912 | 910,31078 913 | 911,31078 914 | 912,31078 915 | 913,31078 916 | 914,31078 917 | 915,31047 918 | 916,31047 919 | 917,31047 920 | 918,31047 921 | 919,31047 922 | 920,31047 923 | 921,31042 924 | 922,31036 925 | 923,31036 926 | 924,31036 927 | 925,31036 928 | 926,31036 929 | 927,31005 930 | 928,31005 931 | 929,30981 932 | 930,30981 933 | 931,30981 934 | 932,30971 935 | 933,30969 936 | 934,30969 937 | 935,30969 938 | 936,30969 939 | 937,30953 940 | 938,30915 941 | 939,30915 942 | 940,30915 943 | 941,30911 944 | 942,30893 945 | 943,30893 946 | 944,30893 947 | 945,30893 948 | 946,30893 949 | 947,30893 950 | 948,30893 951 | 949,30893 952 | 950,30797 953 | 951,30797 954 | 952,30797 955 | 953,30797 956 | 954,30797 957 | 955,30794 958 | 956,30786 959 | 957,30786 960 | 958,30786 961 | 959,30786 962 | 960,30786 963 | 961,30786 964 | 962,30784 965 | 963,30778 966 | 964,30774 967 | 965,30744 968 | 966,30622 969 | 967,30622 970 | 968,30622 971 | 969,30622 972 | 970,30622 973 | 971,30622 974 | 972,30621 975 | 973,30621 976 | 974,30621 977 | 975,30621 978 | 976,30606 979 | 977,30606 980 | 978,30606 981 | 979,30606 982 | 980,30606 983 | 981,30606 984 | 982,30606 985 | 983,30606 986 | 984,30572 987 | 985,30572 988 | 986,30572 989 | 987,30572 990 | 988,30572 991 | 989,30572 992 | 990,30572 993 | 991,30572 994 | 992,30564 995 | 993,30550 996 | 994,30541 997 | 995,30541 998 | 996,30541 999 | 997,30541 1000 | 998,30541 1001 | 999,30541 1002 | -------------------------------------------------------------------------------- /output_data/fpga_placer_history_8.csv: -------------------------------------------------------------------------------- 1 | step,obj_fn_value 2 | 0,79252 3 | 1,79134 4 | 2,78904 5 | 3,78464 6 | 4,78382 7 | 5,78206 8 | 6,77862 9 | 7,77665 10 | 8,77466 11 | 9,77234 12 | 10,77021 13 | 11,76871 14 | 12,76831 15 | 13,76643 16 | 14,76616 17 | 15,76350 18 | 16,76336 19 | 17,76270 20 | 18,76249 21 | 19,76154 22 | 20,75961 23 | 21,75804 24 | 22,75713 25 | 23,75313 26 | 24,75102 27 | 25,74672 28 | 26,74488 29 | 27,74250 30 | 28,73962 31 | 29,73613 32 | 30,73379 33 | 31,72891 34 | 32,72689 35 | 33,72609 36 | 34,72485 37 | 35,72325 38 | 36,72291 39 | 37,72145 40 | 38,71973 41 | 39,71901 42 | 40,71681 43 | 41,71455 44 | 42,71413 45 | 43,71197 46 | 44,71197 47 | 45,71072 48 | 46,71008 49 | 47,71000 50 | 48,70850 51 | 49,70704 52 | 50,70387 53 | 51,70345 54 | 52,70087 55 | 53,69905 56 | 54,69885 57 | 55,69832 58 | 56,69832 59 | 57,69829 60 | 58,69667 61 | 59,69566 62 | 60,69368 63 | 61,69320 64 | 62,69211 65 | 63,69068 66 | 64,68833 67 | 65,68781 68 | 66,68781 69 | 67,68781 70 | 68,68583 71 | 69,68428 72 | 70,68426 73 | 71,68210 74 | 72,68107 75 | 73,67885 76 | 74,67871 77 | 75,67571 78 | 76,67181 79 | 77,67057 80 | 78,66767 81 | 79,66581 82 | 80,66544 83 | 81,66456 84 | 82,66278 85 | 83,66057 86 | 84,65966 87 | 85,65874 88 | 86,65848 89 | 87,65702 90 | 88,65683 91 | 89,65674 92 | 90,65573 93 | 91,65263 94 | 92,65263 95 | 93,64871 96 | 94,64689 97 | 95,64485 98 | 96,64417 99 | 97,64417 100 | 98,64391 101 | 99,64391 102 | 100,64153 103 | 101,64139 104 | 102,64060 105 | 103,63878 106 | 104,63816 107 | 105,63799 108 | 106,63755 109 | 107,63755 110 | 108,63646 111 | 109,63462 112 | 110,63376 113 | 111,63374 114 | 112,63086 115 | 113,62972 116 | 114,62740 117 | 115,62678 118 | 116,62185 119 | 117,61913 120 | 118,61913 121 | 119,61901 122 | 120,61843 123 | 121,61769 124 | 122,61745 125 | 123,61485 126 | 124,61411 127 | 125,61121 128 | 126,61026 129 | 127,60778 130 | 128,60706 131 | 129,60602 132 | 130,60594 133 | 131,60303 134 | 132,60245 135 | 133,59935 136 | 134,59935 137 | 135,59785 138 | 136,59754 139 | 137,59566 140 | 138,59430 141 | 139,59414 142 | 140,59206 143 | 141,59206 144 | 142,59200 145 | 143,59157 146 | 144,59065 147 | 145,58651 148 | 146,58613 149 | 147,58601 150 | 148,58593 151 | 149,58593 152 | 150,58571 153 | 151,58509 154 | 152,58459 155 | 153,58451 156 | 154,58433 157 | 155,58433 158 | 156,58233 159 | 157,58017 160 | 158,57893 161 | 159,57823 162 | 160,57771 163 | 161,57771 164 | 162,57745 165 | 163,57657 166 | 164,57649 167 | 165,57584 168 | 166,57295 169 | 167,57235 170 | 168,57123 171 | 169,56879 172 | 170,56879 173 | 171,56748 174 | 172,56748 175 | 173,56730 176 | 174,56716 177 | 175,56610 178 | 176,56610 179 | 177,56610 180 | 178,56549 181 | 179,56549 182 | 180,56450 183 | 181,56428 184 | 182,56295 185 | 183,56042 186 | 184,56042 187 | 185,56042 188 | 186,56042 189 | 187,56027 190 | 188,55733 191 | 189,55499 192 | 190,55448 193 | 191,55369 194 | 192,55236 195 | 193,55148 196 | 194,55148 197 | 195,55128 198 | 196,55120 199 | 197,55111 200 | 198,55053 201 | 199,55053 202 | 200,54996 203 | 201,54890 204 | 202,54890 205 | 203,54876 206 | 204,54752 207 | 205,54608 208 | 206,54608 209 | 207,54507 210 | 208,54471 211 | 209,54405 212 | 210,54319 213 | 211,54257 214 | 212,54257 215 | 213,54257 216 | 214,54223 217 | 215,54147 218 | 216,54105 219 | 217,54049 220 | 218,53772 221 | 219,53730 222 | 220,53724 223 | 221,53724 224 | 222,53394 225 | 223,53370 226 | 224,53370 227 | 225,53362 228 | 226,53134 229 | 227,53084 230 | 228,53084 231 | 229,52918 232 | 230,52905 233 | 231,52905 234 | 232,52846 235 | 233,52704 236 | 234,52600 237 | 235,52600 238 | 236,52472 239 | 237,52404 240 | 238,52196 241 | 239,52164 242 | 240,52080 243 | 241,52052 244 | 242,52052 245 | 243,52052 246 | 244,52027 247 | 245,51865 248 | 246,51659 249 | 247,51375 250 | 248,51344 251 | 249,51174 252 | 250,51104 253 | 251,51104 254 | 252,51047 255 | 253,50913 256 | 254,50913 257 | 255,50890 258 | 256,50856 259 | 257,50698 260 | 258,50684 261 | 259,50553 262 | 260,50177 263 | 261,50036 264 | 262,49998 265 | 263,49886 266 | 264,49882 267 | 265,49704 268 | 266,49695 269 | 267,49663 270 | 268,49647 271 | 269,49635 272 | 270,49635 273 | 271,49572 274 | 272,49506 275 | 273,49429 276 | 274,49429 277 | 275,49281 278 | 276,49271 279 | 277,49263 280 | 278,49259 281 | 279,49216 282 | 280,49164 283 | 281,49131 284 | 282,49088 285 | 283,49088 286 | 284,48916 287 | 285,48916 288 | 286,48878 289 | 287,48814 290 | 288,48734 291 | 289,48734 292 | 290,48590 293 | 291,48556 294 | 292,48556 295 | 293,48330 296 | 294,48330 297 | 295,48303 298 | 296,48252 299 | 297,48252 300 | 298,48053 301 | 299,48053 302 | 300,47957 303 | 301,47911 304 | 302,47863 305 | 303,47863 306 | 304,47863 307 | 305,47851 308 | 306,47817 309 | 307,47738 310 | 308,47600 311 | 309,47306 312 | 310,47306 313 | 311,47180 314 | 312,47180 315 | 313,47180 316 | 314,46912 317 | 315,46891 318 | 316,46753 319 | 317,46753 320 | 318,46753 321 | 319,46537 322 | 320,46477 323 | 321,46459 324 | 322,46397 325 | 323,46333 326 | 324,46333 327 | 325,46331 328 | 326,46217 329 | 327,46217 330 | 328,46163 331 | 329,46120 332 | 330,45982 333 | 331,45982 334 | 332,45868 335 | 333,45790 336 | 334,45710 337 | 335,45710 338 | 336,45710 339 | 337,45710 340 | 338,45710 341 | 339,45606 342 | 340,45473 343 | 341,45445 344 | 342,45372 345 | 343,45288 346 | 344,45038 347 | 345,45038 348 | 346,44398 349 | 347,44398 350 | 348,44316 351 | 349,44249 352 | 350,44249 353 | 351,44003 354 | 352,43845 355 | 353,43689 356 | 354,43473 357 | 355,43473 358 | 356,43473 359 | 357,43307 360 | 358,43307 361 | 359,43307 362 | 360,43171 363 | 361,43093 364 | 362,42883 365 | 363,42855 366 | 364,42855 367 | 365,42855 368 | 366,42855 369 | 367,42783 370 | 368,42740 371 | 369,42384 372 | 370,42384 373 | 371,42347 374 | 372,42037 375 | 373,42037 376 | 374,41997 377 | 375,41997 378 | 376,41997 379 | 377,41951 380 | 378,41899 381 | 379,41899 382 | 380,41807 383 | 381,41487 384 | 382,41474 385 | 383,41334 386 | 384,41318 387 | 385,41284 388 | 386,41254 389 | 387,41254 390 | 388,40842 391 | 389,40842 392 | 390,40712 393 | 391,40712 394 | 392,40712 395 | 393,40712 396 | 394,40682 397 | 395,40551 398 | 396,40551 399 | 397,40367 400 | 398,40367 401 | 399,40319 402 | 400,40319 403 | 401,40301 404 | 402,40301 405 | 403,40301 406 | 404,40225 407 | 405,40225 408 | 406,40225 409 | 407,40199 410 | 408,40151 411 | 409,39983 412 | 410,39880 413 | 411,39858 414 | 412,39858 415 | 413,39858 416 | 414,39858 417 | 415,39815 418 | 416,39815 419 | 417,39635 420 | 418,39403 421 | 419,39373 422 | 420,39186 423 | 421,39095 424 | 422,39095 425 | 423,39093 426 | 424,39093 427 | 425,39093 428 | 426,39079 429 | 427,39079 430 | 428,39079 431 | 429,38999 432 | 430,38957 433 | 431,38957 434 | 432,38957 435 | 433,38957 436 | 434,38935 437 | 435,38935 438 | 436,38935 439 | 437,38901 440 | 438,38901 441 | 439,38657 442 | 440,38549 443 | 441,38549 444 | 442,38549 445 | 443,38543 446 | 444,38531 447 | 445,38482 448 | 446,38450 449 | 447,38347 450 | 448,38347 451 | 449,38347 452 | 450,38343 453 | 451,38334 454 | 452,38334 455 | 453,38274 456 | 454,38274 457 | 455,38188 458 | 456,38182 459 | 457,38182 460 | 458,38182 461 | 459,38032 462 | 460,38012 463 | 461,38012 464 | 462,38004 465 | 463,38004 466 | 464,38004 467 | 465,38004 468 | 466,37948 469 | 467,37918 470 | 468,37918 471 | 469,37908 472 | 470,37896 473 | 471,37896 474 | 472,37896 475 | 473,37896 476 | 474,37896 477 | 475,37836 478 | 476,37835 479 | 477,37727 480 | 478,37727 481 | 479,37722 482 | 480,37722 483 | 481,37722 484 | 482,37722 485 | 483,37722 486 | 484,37640 487 | 485,37640 488 | 486,37640 489 | 487,37640 490 | 488,37640 491 | 489,37640 492 | 490,37640 493 | 491,37640 494 | 492,37620 495 | 493,37620 496 | 494,37586 497 | 495,37571 498 | 496,37571 499 | 497,37448 500 | 498,37446 501 | 499,37440 502 | 500,37344 503 | 501,37344 504 | 502,37341 505 | 503,37341 506 | 504,37341 507 | 505,37311 508 | 506,37295 509 | 507,37286 510 | 508,37270 511 | 509,37270 512 | 510,37270 513 | 511,37270 514 | 512,37270 515 | 513,37270 516 | 514,37234 517 | 515,37189 518 | 516,37098 519 | 517,36904 520 | 518,36892 521 | 519,36892 522 | 520,36892 523 | 521,36892 524 | 522,36885 525 | 523,36885 526 | 524,36867 527 | 525,36830 528 | 526,36806 529 | 527,36806 530 | 528,36722 531 | 529,36690 532 | 530,36662 533 | 531,36662 534 | 532,36662 535 | 533,36642 536 | 534,36642 537 | 535,36642 538 | 536,36500 539 | 537,36490 540 | 538,36490 541 | 539,36490 542 | 540,36477 543 | 541,36477 544 | 542,36477 545 | 543,36451 546 | 544,36433 547 | 545,36433 548 | 546,36433 549 | 547,36295 550 | 548,36295 551 | 549,36271 552 | 550,36271 553 | 551,36271 554 | 552,36243 555 | 553,36243 556 | 554,36243 557 | 555,36243 558 | 556,36243 559 | 557,36243 560 | 558,36087 561 | 559,36087 562 | 560,36087 563 | 561,36087 564 | 562,36087 565 | 563,36063 566 | 564,35964 567 | 565,35964 568 | 566,35955 569 | 567,35823 570 | 568,35704 571 | 569,35704 572 | 570,35704 573 | 571,35704 574 | 572,35704 575 | 573,35704 576 | 574,35676 577 | 575,35676 578 | 576,35676 579 | 577,35676 580 | 578,35649 581 | 579,35589 582 | 580,35589 583 | 581,35577 584 | 582,35483 585 | 583,35483 586 | 584,35483 587 | 585,35483 588 | 586,35483 589 | 587,35454 590 | 588,35132 591 | 589,35096 592 | 590,35096 593 | 591,35096 594 | 592,35068 595 | 593,34953 596 | 594,34953 597 | 595,34953 598 | 596,34953 599 | 597,34953 600 | 598,34953 601 | 599,34953 602 | 600,34953 603 | 601,34916 604 | 602,34916 605 | 603,34916 606 | 604,34916 607 | 605,34916 608 | 606,34916 609 | 607,34916 610 | 608,34916 611 | 609,34916 612 | 610,34916 613 | 611,34916 614 | 612,34916 615 | 613,34916 616 | 614,34916 617 | 615,34916 618 | 616,34910 619 | 617,34897 620 | 618,34897 621 | 619,34897 622 | 620,34873 623 | 621,34768 624 | 622,34764 625 | 623,34762 626 | 624,34762 627 | 625,34762 628 | 626,34648 629 | 627,34648 630 | 628,34648 631 | 629,34648 632 | 630,34648 633 | 631,34604 634 | 632,34604 635 | 633,34604 636 | 634,34604 637 | 635,34604 638 | 636,34604 639 | 637,34589 640 | 638,34589 641 | 639,34589 642 | 640,34581 643 | 641,34581 644 | 642,34581 645 | 643,34511 646 | 644,34511 647 | 645,34508 648 | 646,34508 649 | 647,34395 650 | 648,34373 651 | 649,34373 652 | 650,34331 653 | 651,34259 654 | 652,34075 655 | 653,34075 656 | 654,34075 657 | 655,34043 658 | 656,34043 659 | 657,34043 660 | 658,34043 661 | 659,34035 662 | 660,34031 663 | 661,34019 664 | 662,33971 665 | 663,33971 666 | 664,33971 667 | 665,33971 668 | 666,33971 669 | 667,33940 670 | 668,33940 671 | 669,33935 672 | 670,33935 673 | 671,33915 674 | 672,33912 675 | 673,33912 676 | 674,33912 677 | 675,33808 678 | 676,33620 679 | 677,33605 680 | 678,33605 681 | 679,33577 682 | 680,33577 683 | 681,33577 684 | 682,33577 685 | 683,33541 686 | 684,33541 687 | 685,33541 688 | 686,33541 689 | 687,33541 690 | 688,33541 691 | 689,33518 692 | 690,33496 693 | 691,33496 694 | 692,33488 695 | 693,33488 696 | 694,33488 697 | 695,33488 698 | 696,33488 699 | 697,33488 700 | 698,33488 701 | 699,33488 702 | 700,33488 703 | 701,33488 704 | 702,33488 705 | 703,33488 706 | 704,33252 707 | 705,33252 708 | 706,33245 709 | 707,33245 710 | 708,33245 711 | 709,33245 712 | 710,33183 713 | 711,33183 714 | 712,33147 715 | 713,33099 716 | 714,33099 717 | 715,33099 718 | 716,32957 719 | 717,32957 720 | 718,32957 721 | 719,32923 722 | 720,32895 723 | 721,32892 724 | 722,32892 725 | 723,32892 726 | 724,32892 727 | 725,32892 728 | 726,32876 729 | 727,32876 730 | 728,32876 731 | 729,32786 732 | 730,32786 733 | 731,32786 734 | 732,32786 735 | 733,32786 736 | 734,32726 737 | 735,32726 738 | 736,32726 739 | 737,32726 740 | 738,32726 741 | 739,32720 742 | 740,32720 743 | 741,32698 744 | 742,32698 745 | 743,32698 746 | 744,32698 747 | 745,32698 748 | 746,32698 749 | 747,32687 750 | 748,32686 751 | 749,32686 752 | 750,32686 753 | 751,32686 754 | 752,32686 755 | 753,32686 756 | 754,32672 757 | 755,32672 758 | 756,32650 759 | 757,32650 760 | 758,32630 761 | 759,32630 762 | 760,32630 763 | 761,32618 764 | 762,32614 765 | 763,32614 766 | 764,32598 767 | 765,32598 768 | 766,32598 769 | 767,32598 770 | 768,32598 771 | 769,32598 772 | 770,32598 773 | 771,32598 774 | 772,32592 775 | 773,32592 776 | 774,32592 777 | 775,32592 778 | 776,32489 779 | 777,32489 780 | 778,32337 781 | 779,32286 782 | 780,32286 783 | 781,32193 784 | 782,32193 785 | 783,32193 786 | 784,32193 787 | 785,32193 788 | 786,32183 789 | 787,32153 790 | 788,32153 791 | 789,32153 792 | 790,31981 793 | 791,31981 794 | 792,31885 795 | 793,31885 796 | 794,31885 797 | 795,31789 798 | 796,31789 799 | 797,31789 800 | 798,31768 801 | 799,31768 802 | 800,31768 803 | 801,31760 804 | 802,31760 805 | 803,31753 806 | 804,31753 807 | 805,31747 808 | 806,31747 809 | 807,31747 810 | 808,31743 811 | 809,31743 812 | 810,31743 813 | 811,31677 814 | 812,31663 815 | 813,31663 816 | 814,31663 817 | 815,31663 818 | 816,31663 819 | 817,31663 820 | 818,31636 821 | 819,31636 822 | 820,31636 823 | 821,31636 824 | 822,31550 825 | 823,31550 826 | 824,31382 827 | 825,31323 828 | 826,31317 829 | 827,31317 830 | 828,31297 831 | 829,31295 832 | 830,31269 833 | 831,31269 834 | 832,31269 835 | 833,31165 836 | 834,31165 837 | 835,31165 838 | 836,31165 839 | 837,31106 840 | 838,31106 841 | 839,31106 842 | 840,31106 843 | 841,31106 844 | 842,31106 845 | 843,31102 846 | 844,31102 847 | 845,31102 848 | 846,31086 849 | 847,31086 850 | 848,31086 851 | 849,31086 852 | 850,31086 853 | 851,31086 854 | 852,31058 855 | 853,31058 856 | 854,31058 857 | 855,31058 858 | 856,31058 859 | 857,31036 860 | 858,31036 861 | 859,31036 862 | 860,31034 863 | 861,31034 864 | 862,31034 865 | 863,31034 866 | 864,31028 867 | 865,31012 868 | 866,31012 869 | 867,30838 870 | 868,30838 871 | 869,30798 872 | 870,30792 873 | 871,30792 874 | 872,30788 875 | 873,30788 876 | 874,30756 877 | 875,30756 878 | 876,30754 879 | 877,30754 880 | 878,30661 881 | 879,30651 882 | 880,30651 883 | 881,30651 884 | 882,30651 885 | 883,30651 886 | 884,30651 887 | 885,30641 888 | 886,30641 889 | 887,30569 890 | 888,30569 891 | 889,30569 892 | 890,30569 893 | 891,30569 894 | 892,30569 895 | 893,30569 896 | 894,30569 897 | 895,30569 898 | 896,30569 899 | 897,30549 900 | 898,30549 901 | 899,30549 902 | 900,30549 903 | 901,30549 904 | 902,30549 905 | 903,30434 906 | 904,30434 907 | 905,30434 908 | 906,30434 909 | 907,30432 910 | 908,30432 911 | 909,30432 912 | 910,30432 913 | 911,30354 914 | 912,30354 915 | 913,30354 916 | 914,30354 917 | 915,30354 918 | 916,30354 919 | 917,30354 920 | 918,30354 921 | 919,30351 922 | 920,30097 923 | 921,30095 924 | 922,30095 925 | 923,30095 926 | 924,30095 927 | 925,30095 928 | 926,30095 929 | 927,30095 930 | 928,30053 931 | 929,30053 932 | 930,30053 933 | 931,30053 934 | 932,30053 935 | 933,30051 936 | 934,30051 937 | 935,30051 938 | 936,30051 939 | 937,30051 940 | 938,30051 941 | 939,30051 942 | 940,30051 943 | 941,30051 944 | 942,30051 945 | 943,30011 946 | 944,30011 947 | 945,30011 948 | 946,30011 949 | 947,30011 950 | 948,29819 951 | 949,29809 952 | 950,29809 953 | 951,29784 954 | 952,29784 955 | 953,29780 956 | 954,29780 957 | 955,29780 958 | 956,29780 959 | 957,29752 960 | 958,29752 961 | 959,29743 962 | 960,29743 963 | 961,29743 964 | 962,29743 965 | 963,29733 966 | 964,29718 967 | 965,29718 968 | 966,29718 969 | 967,29718 970 | 968,29704 971 | 969,29704 972 | 970,29704 973 | 971,29704 974 | 972,29704 975 | 973,29704 976 | 974,29690 977 | 975,29684 978 | 976,29684 979 | 977,29658 980 | 978,29639 981 | 979,29639 982 | 980,29639 983 | 981,29639 984 | 982,29617 985 | 983,29617 986 | 984,29617 987 | 985,29617 988 | 986,29613 989 | 987,29589 990 | 988,29572 991 | 989,29552 992 | 990,29552 993 | 991,29534 994 | 992,29534 995 | 993,29534 996 | 994,29534 997 | 995,29534 998 | 996,29534 999 | 997,29534 1000 | 998,29534 1001 | 999,29534 1002 | -------------------------------------------------------------------------------- /output_data/initial_solution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanpie/sa-placer/e17d4ddcb96e62c3a9961477ad062814c9d84d66/output_data/initial_solution.png -------------------------------------------------------------------------------- /src/fpga_layout.rs: -------------------------------------------------------------------------------- 1 | use rustc_hash::FxHashMap; 2 | 3 | #[derive(Clone, Hash, PartialEq, Eq, Debug, Copy)] 4 | pub enum MacroType { 5 | CLB, 6 | DSP, 7 | BRAM, 8 | IO, 9 | } 10 | 11 | #[derive(Clone, Hash, PartialEq, Eq, Debug)] 12 | pub enum FPGALayoutType { 13 | MacroType(MacroType), 14 | EMPTY, 15 | } 16 | 17 | #[derive(Eq, Hash, PartialEq, Clone, Copy, Debug)] 18 | pub struct FPGALayoutCoordinate { 19 | pub x: u32, 20 | pub y: u32, 21 | } 22 | 23 | impl FPGALayoutCoordinate { 24 | pub fn new(x: u32, y: u32) -> FPGALayoutCoordinate { 25 | FPGALayoutCoordinate { x, y } 26 | } 27 | } 28 | 29 | #[derive(Debug, Clone)] 30 | pub struct FPGALayout { 31 | pub map: FxHashMap, 32 | pub width: u32, 33 | pub height: u32, 34 | } 35 | 36 | impl FPGALayout { 37 | pub fn new(width: u32, height: u32) -> FPGALayout { 38 | FPGALayout { 39 | map: FxHashMap::default(), 40 | width, 41 | height, 42 | } 43 | } 44 | 45 | pub fn config_corners(&mut self, layout_type: FPGALayoutType) { 46 | self.map 47 | .insert(FPGALayoutCoordinate::new(0, 0), layout_type.clone()); 48 | self.map.insert( 49 | FPGALayoutCoordinate::new(0, self.height - 1), 50 | layout_type.clone(), 51 | ); 52 | self.map.insert( 53 | FPGALayoutCoordinate::new(self.width - 1, 0), 54 | layout_type.clone(), 55 | ); 56 | self.map.insert( 57 | FPGALayoutCoordinate::new(self.width - 1, self.height - 1), 58 | layout_type.clone(), 59 | ); 60 | } 61 | 62 | pub fn config_border(&mut self, layout_type: FPGALayoutType) { 63 | for x in 0..self.width { 64 | self.map 65 | .insert(FPGALayoutCoordinate::new(x, 0), layout_type.clone()); 66 | self.map.insert( 67 | FPGALayoutCoordinate::new(x, self.height - 1), 68 | layout_type.clone(), 69 | ); 70 | } 71 | 72 | for y in 0..self.height { 73 | self.map 74 | .insert(FPGALayoutCoordinate::new(0, y), layout_type.clone()); 75 | self.map.insert( 76 | FPGALayoutCoordinate::new(self.width - 1, y), 77 | layout_type.clone(), 78 | ); 79 | } 80 | } 81 | 82 | pub fn config_repeat( 83 | &mut self, 84 | x: u32, 85 | y: u32, 86 | width: u32, 87 | height: u32, 88 | step_x: u32, 89 | step_y: u32, 90 | layout_type: FPGALayoutType, 91 | ) { 92 | for x in (x..(x + width)).step_by(step_x as usize) { 93 | for y in (y..(y + height)).step_by(step_y as usize) { 94 | if x >= self.width || y >= self.height { 95 | continue; 96 | } 97 | self.map 98 | .insert(FPGALayoutCoordinate::new(x, y), layout_type.clone()); 99 | } 100 | } 101 | } 102 | 103 | pub fn valid(&mut self) -> bool { 104 | // make sure all entries are inside the width and height 105 | for coord in self.map.keys() { 106 | if coord.x >= self.width || coord.y >= self.height { 107 | return false; 108 | } 109 | } 110 | true 111 | } 112 | 113 | pub fn get(&self, coordinate: &FPGALayoutCoordinate) -> Option { 114 | if coordinate.x >= self.width || coordinate.y >= self.height { 115 | return None; 116 | } 117 | if !self.map.contains_key(coordinate) { 118 | return Some(FPGALayoutType::EMPTY); 119 | } 120 | self.map.get(coordinate).cloned() 121 | } 122 | 123 | pub fn count_summary(&self) -> FxHashMap { 124 | let mut count_summary = FxHashMap::default(); 125 | 126 | let mut empty_count = 0; 127 | let mut clb_count = 0; 128 | let mut dsp_count = 0; 129 | let mut bram_count = 0; 130 | let mut io_count = 0; 131 | 132 | for x in 0..self.width { 133 | for y in 0..self.height { 134 | let layout_type = self.get(&FPGALayoutCoordinate::new(x, y)).unwrap(); 135 | 136 | match layout_type { 137 | FPGALayoutType::MacroType(MacroType::CLB) => clb_count += 1, 138 | FPGALayoutType::MacroType(MacroType::DSP) => dsp_count += 1, 139 | FPGALayoutType::MacroType(MacroType::BRAM) => bram_count += 1, 140 | FPGALayoutType::MacroType(MacroType::IO) => io_count += 1, 141 | FPGALayoutType::EMPTY => empty_count += 1, 142 | } 143 | } 144 | } 145 | 146 | count_summary.insert(FPGALayoutType::EMPTY, empty_count); 147 | count_summary.insert(FPGALayoutType::MacroType(MacroType::CLB), clb_count); 148 | count_summary.insert(FPGALayoutType::MacroType(MacroType::DSP), dsp_count); 149 | count_summary.insert(FPGALayoutType::MacroType(MacroType::BRAM), bram_count); 150 | count_summary.insert(FPGALayoutType::MacroType(MacroType::IO), io_count); 151 | 152 | count_summary 153 | } 154 | 155 | pub fn render_summary(&self) -> String { 156 | let mut output: String = String::new(); 157 | 158 | // print the x, y size of the descive 159 | // print the number of each type of macro type 160 | 161 | output.push_str("FPGA Layout Summary\n"); 162 | output.push_str(&format!("Width: {}\n", self.width)); 163 | output.push_str(&format!("Height: {}\n", self.height)); 164 | 165 | let mut clb_count = 0; 166 | let mut dsp_count = 0; 167 | let mut bram_count = 0; 168 | let mut io_count = 0; 169 | let mut empty_count = 0; 170 | 171 | for x in 0..self.width { 172 | for y in 0..self.height { 173 | let layout_type = self 174 | .map 175 | .get(&FPGALayoutCoordinate::new(x, y)) 176 | .unwrap_or(&FPGALayoutType::EMPTY); 177 | 178 | match layout_type { 179 | FPGALayoutType::MacroType(MacroType::CLB) => clb_count += 1, 180 | FPGALayoutType::MacroType(MacroType::DSP) => dsp_count += 1, 181 | FPGALayoutType::MacroType(MacroType::BRAM) => bram_count += 1, 182 | FPGALayoutType::MacroType(MacroType::IO) => io_count += 1, 183 | FPGALayoutType::EMPTY => empty_count += 1, 184 | } 185 | } 186 | } 187 | 188 | output.push_str(&format!("CLB Count: {}\n", clb_count)); 189 | output.push_str(&format!("DSP Count: {}\n", dsp_count)); 190 | output.push_str(&format!("BRAM Count: {}\n", bram_count)); 191 | output.push_str(&format!("IO Count: {}\n", io_count)); 192 | output.push_str(&format!("Empty Count: {}\n", empty_count)); 193 | 194 | output 195 | } 196 | 197 | pub fn render_ascii(&self) -> String { 198 | let mut output = String::new(); 199 | 200 | // Draw the top line 201 | for x in 0..self.width { 202 | if x == 0 { 203 | output.push_str("┌───"); 204 | } else { 205 | output.push_str("┬───"); 206 | } 207 | } 208 | output.push_str("┐\n"); 209 | 210 | for y in 0..self.height { 211 | // Draw the cells 212 | for x in 0..self.width { 213 | let layout_type = self 214 | .map 215 | .get(&FPGALayoutCoordinate::new(x, y)) 216 | .unwrap_or(&FPGALayoutType::EMPTY); 217 | 218 | match layout_type { 219 | FPGALayoutType::MacroType(MacroType::CLB) => output.push_str("│ C "), 220 | FPGALayoutType::MacroType(MacroType::DSP) => output.push_str("│ D "), 221 | FPGALayoutType::MacroType(MacroType::BRAM) => output.push_str("│ B "), 222 | FPGALayoutType::MacroType(MacroType::IO) => output.push_str("│ I "), 223 | FPGALayoutType::EMPTY => output.push_str("│ "), 224 | } 225 | } 226 | output.push_str("│\n"); 227 | 228 | // Draw the line below the cells if we are not at the last row 229 | if y < self.height - 1 { 230 | for x in 0..self.width { 231 | if x == 0 { 232 | output.push_str("├───"); 233 | } else { 234 | output.push_str("┼───"); 235 | } 236 | } 237 | output.push_str("┤\n"); 238 | } 239 | } 240 | 241 | // Draw the bottom line 242 | for x in 0..self.width { 243 | if x == 0 { 244 | output.push_str("└───"); 245 | } else { 246 | output.push_str("┴───"); 247 | } 248 | } 249 | output.push_str("┘\n"); 250 | 251 | output 252 | } 253 | } 254 | 255 | pub fn build_simple_fpga_layout(width: u32, height: u32) -> FPGALayout { 256 | let mut layout = FPGALayout::new(width, height); 257 | 258 | layout.config_border(FPGALayoutType::MacroType(MacroType::IO)); 259 | layout.config_corners(FPGALayoutType::EMPTY); 260 | layout.config_repeat( 261 | 1, 262 | 1, 263 | width - 2, 264 | height - 2, 265 | 1, 266 | 1, 267 | FPGALayoutType::MacroType(MacroType::CLB), 268 | ); 269 | 270 | // evey 10 columns should be BRAM 271 | layout.config_repeat( 272 | 10, 273 | 1, 274 | width - 2, 275 | height - 2, 276 | 10, 277 | 1, 278 | FPGALayoutType::MacroType(MacroType::BRAM), 279 | ); 280 | 281 | assert!(layout.valid()); 282 | 283 | layout 284 | } 285 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![feature(portable_simd)] 2 | #![feature(iter_array_chunks)] 3 | 4 | pub mod fpga_layout; 5 | pub mod netlist; 6 | pub mod placer; 7 | 8 | pub use fpga_layout::*; 9 | pub use netlist::*; 10 | pub use placer::*; 11 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{collections::HashMap, process::Command, sync::Mutex}; 2 | 3 | use rayon::prelude::*; 4 | use sa_placer_lib::*; 5 | 6 | fn render_solution_to_png( 7 | solution: &PlacementSolution<'_>, 8 | output_name: &str, 9 | output_dir: &str, 10 | keep_svg: bool, 11 | ) { 12 | std::fs::write( 13 | // format!("fpga_layout_solution_{}.svg", solution_name), 14 | format!("{}/{}.svg", output_dir, output_name), 15 | solution.render_svg(), 16 | ) 17 | .expect("Unable to write file"); 18 | let _output = Command::new("magick") 19 | .arg("convert") 20 | .arg("-size") 21 | .arg("800x800") 22 | .arg(format!("{}/{}.svg", output_dir, output_name)) 23 | .arg(format!("{}/{}.png", output_dir, output_name)) 24 | .output() 25 | .expect("failed to execute process"); 26 | if !keep_svg { 27 | std::fs::remove_file(format!("{}/{}.svg", output_dir, output_name)) 28 | .expect("Unable to remove file"); 29 | } 30 | } 31 | 32 | fn main() { 33 | // limit the number of threads to 6 becasue my laptop has 12 logical cores 34 | rayon::ThreadPoolBuilder::new() 35 | .num_threads(6) 36 | .build_global() 37 | .unwrap(); 38 | 39 | // make a data directory 40 | if std::path::Path::new("./output_data").exists() { 41 | std::fs::remove_dir_all("./output_data").expect("Unable to remove directory"); 42 | } 43 | std::fs::create_dir_all("./output_data").expect("Unable to create directory"); 44 | 45 | // build FPGA layout 46 | let layout = build_simple_fpga_layout(64, 64); 47 | 48 | // ascii render of the layout 49 | let vis = layout.render_ascii(); 50 | std::fs::write("./output_data/fpga_layout.txt", vis).expect("Unable to write file"); 51 | 52 | // text summary of the fpga layout 53 | let summary = layout.render_summary(); 54 | std::fs::write("./output_data/fpga_layout_summary.txt", summary).expect("Unable to write file"); 55 | 56 | // build a random netlist 57 | let netlist: NetlistGraph = build_simple_netlist(300, 30, 100); 58 | 59 | // build a random initial placement solution 60 | let inital_placement_method = InitialPlacerMethod::Random; 61 | let initial_solution = gen_initial_placement(&layout, &netlist, inital_placement_method); 62 | 63 | render_solution_to_png( 64 | &initial_solution, 65 | "initial_solution", 66 | "./output_data", 67 | false, 68 | ); 69 | 70 | // values of n_neighbors to explore 71 | let configs_n_neighbors = vec![1, 2, 4, 8, 16, 32, 64, 128, 256]; 72 | 73 | // number of steps to run for all placement runs 74 | let n_steps = 1000; 75 | 76 | let x_data_collection = Mutex::new(HashMap::new()); 77 | let y_data_collection = Mutex::new(HashMap::new()); 78 | let render_collection = Mutex::new(HashMap::new()); 79 | let final_solution_collection = Mutex::new(HashMap::new()); 80 | let config_data_collection = configs_n_neighbors.clone(); 81 | 82 | config_data_collection.par_iter().for_each(|&n_neighbors| { 83 | println!("Running SA Placer with {} neighbors", n_neighbors); 84 | let placer_output = 85 | fast_sa_placer(initial_solution.clone(), n_steps, n_neighbors, false, true); 86 | 87 | let final_solution: PlacementSolution<'_> = placer_output.final_solution; 88 | 89 | // write the x and y data to csv 90 | let x_data: Vec = placer_output.x_steps; 91 | let y_data = placer_output.y_cost; 92 | 93 | let mut x_data_collection = x_data_collection.lock().unwrap(); 94 | let mut y_data_collection = y_data_collection.lock().unwrap(); 95 | x_data_collection.insert(n_neighbors, x_data); 96 | y_data_collection.insert(n_neighbors, y_data); 97 | 98 | let mut render_collection = render_collection.lock().unwrap(); 99 | let mut final_solution_collection = final_solution_collection.lock().unwrap(); 100 | render_collection.insert(n_neighbors, placer_output.renderer.unwrap()); 101 | final_solution_collection.insert(n_neighbors, final_solution.clone()); 102 | }); 103 | 104 | // remove the mutexes 105 | let x_data_collection = x_data_collection.into_inner().unwrap(); 106 | let y_data_collection = y_data_collection.into_inner().unwrap(); 107 | 108 | let final_solution_collection = final_solution_collection.into_inner().unwrap(); 109 | let render_collection = render_collection.into_inner().unwrap(); 110 | 111 | // csv for each n_neighbors 112 | for n in config_data_collection.clone().iter() { 113 | let mut wtr: csv::Writer = 114 | csv::Writer::from_path(format!("output_data/fpga_placer_history_{}.csv", n)).unwrap(); 115 | wtr.write_record(["step", "obj_fn_value"]).unwrap(); 116 | let x_series = x_data_collection.get(n).unwrap(); 117 | let y_series = y_data_collection.get(n).unwrap(); 118 | for (x, y) in x_series.iter().zip(y_series.iter()) { 119 | wtr.write_record(&[x.to_string(), y.to_string()]).unwrap(); 120 | } 121 | wtr.flush().unwrap(); 122 | } 123 | 124 | // one big csv with all the data 125 | let mut wtr: csv::Writer = 126 | csv::Writer::from_path("output_data/fpga_placer_history.csv").unwrap(); 127 | wtr.write_record(["step", "obj_fn_value", "n_neighbors"]) 128 | .unwrap(); 129 | for n_neighbors in config_data_collection.clone() { 130 | let x_series = x_data_collection.get(&n_neighbors).unwrap(); 131 | let y_series = y_data_collection.get(&n_neighbors).unwrap(); 132 | for (x, y) in x_series.iter().zip(y_series.iter()) { 133 | wtr.write_record(&[x.to_string(), y.to_string(), n_neighbors.to_string()]) 134 | .unwrap(); 135 | } 136 | } 137 | 138 | let mut gnuplot_command = String::new(); 139 | gnuplot_command.push_str("set terminal png size 1000,500; "); 140 | gnuplot_command.push_str("set output 'output_data/fpga_placer_history.png'; "); 141 | gnuplot_command.push_str("set datafile separator ','; "); 142 | gnuplot_command.push_str("set title 'FPGA Placement History'; "); 143 | gnuplot_command.push_str("set xlabel 'Step'; "); 144 | gnuplot_command.push_str("set ylabel 'Objective Function Value'; "); 145 | gnuplot_command.push_str("set yrange [0:*]; "); 146 | gnuplot_command.push_str("plot "); 147 | for n_neighbors in config_data_collection.clone() { 148 | gnuplot_command.push_str( 149 | format!( 150 | "'output_data/fpga_placer_history_{}.csv' using 1:2 title '{} neighbors' with lines, ", 151 | n_neighbors, n_neighbors 152 | ) 153 | .as_str(), 154 | ); 155 | } 156 | gnuplot_command.pop(); 157 | gnuplot_command.pop(); 158 | gnuplot_command.push(';'); 159 | 160 | let _output = Command::new("gnuplot") 161 | .arg("-p") 162 | .arg("-e") 163 | .arg(&gnuplot_command) 164 | .output() 165 | .expect("failed to execute process"); 166 | 167 | // render_solution_to_png(&selected_final_solution, "fpga_final_solution"); 168 | 169 | // selected_renderer.render_to_video("./placer_animation", 30.0, 20); 170 | config_data_collection.par_iter().for_each(|&n_neighbors| { 171 | let solution = final_solution_collection.get(&n_neighbors).unwrap(); 172 | render_solution_to_png( 173 | solution, 174 | &format!("final_solution_{}", n_neighbors), 175 | "./output_data", 176 | false, 177 | ); 178 | 179 | // let renderer: Renderer = render_collection.get(&n_neighbors).unwrap().clone(); 180 | // renderer.render_to_video( 181 | // &format!("placer_animation_{}", n_neighbors), 182 | // "./output_data", 183 | // 30.0, 184 | // 20, 185 | // true, 186 | // ); 187 | }); 188 | } 189 | -------------------------------------------------------------------------------- /src/netlist.rs: -------------------------------------------------------------------------------- 1 | use rustc_hash::FxHashMap; 2 | 3 | use super::fpga_layout::MacroType; 4 | 5 | // mod super::fpga_layout; 6 | 7 | use rand::seq::SliceRandom; 8 | use rand::Rng; 9 | use rustworkx_core::generators::gnp_random_graph; 10 | use rustworkx_core::petgraph; 11 | 12 | #[derive(Clone, Hash, PartialEq, Eq, Debug, Copy)] 13 | pub struct NetlistNode { 14 | pub id: u32, 15 | pub macro_type: MacroType, 16 | } 17 | 18 | #[derive(Debug, Clone)] 19 | 20 | pub struct NetlistGraph { 21 | pub graph: petgraph::graph::DiGraph, 22 | } 23 | 24 | impl NetlistGraph { 25 | pub fn all_nodes(&self) -> Vec<&NetlistNode> { 26 | self.graph.node_weights().collect() 27 | } 28 | 29 | pub fn count_summary(&self) -> FxHashMap { 30 | let mut count_summary = FxHashMap::default(); 31 | 32 | let mut clb_count = 0; 33 | let mut dsp_count = 0; 34 | let mut bram_count = 0; 35 | let mut io_count = 0; 36 | 37 | for node in self.graph.node_weights() { 38 | match node.macro_type { 39 | MacroType::CLB => clb_count += 1, 40 | MacroType::DSP => dsp_count += 1, 41 | MacroType::BRAM => bram_count += 1, 42 | MacroType::IO => io_count += 1, 43 | } 44 | } 45 | 46 | count_summary.insert(MacroType::CLB, clb_count); 47 | count_summary.insert(MacroType::DSP, dsp_count); 48 | count_summary.insert(MacroType::BRAM, bram_count); 49 | count_summary.insert(MacroType::IO, io_count); 50 | 51 | count_summary 52 | } 53 | } 54 | 55 | pub fn build_simple_netlist(n_nodes: u32, n_io: u32, n_bram: u32) -> NetlistGraph { 56 | let mut netlist = NetlistGraph { 57 | graph: gnp_random_graph( 58 | n_nodes as usize, 59 | 0.02, 60 | None, 61 | || NetlistNode { 62 | id: rand::thread_rng().gen(), 63 | macro_type: MacroType::CLB, 64 | }, 65 | || (), // default_edge_weight 66 | ) 67 | .unwrap(), 68 | }; 69 | 70 | let mut rng: rand::rngs::ThreadRng = rand::thread_rng(); 71 | 72 | fn get_clb_node_indices(netlist: &NetlistGraph) -> Vec { 73 | netlist 74 | .graph 75 | .node_indices() 76 | .filter(|node_idx| { 77 | netlist.graph.node_weight(*node_idx).unwrap().macro_type == MacroType::CLB 78 | }) 79 | .collect() 80 | } 81 | 82 | // pick n_io random clbs and change their type to io 83 | // use choose_multiple to avoid duplicates 84 | let io_node_indices: Vec<_> = get_clb_node_indices(&netlist) 85 | .choose_multiple(&mut rng, n_io as usize) 86 | .cloned() 87 | .collect(); 88 | 89 | for node_idx in io_node_indices { 90 | let node = netlist.graph.node_weight_mut(node_idx).unwrap(); 91 | node.macro_type = MacroType::IO; 92 | } 93 | 94 | // pick n_bram random clbs and change their type to bram 95 | // use choose_multiple to avoid duplicates 96 | let bram_node_indices: Vec<_> = get_clb_node_indices(&netlist) 97 | .choose_multiple(&mut rng, n_bram as usize) 98 | .cloned() 99 | .collect(); 100 | 101 | for node_idx in bram_node_indices { 102 | let node = netlist.graph.node_weight_mut(node_idx).unwrap(); 103 | node.macro_type = MacroType::BRAM; 104 | } 105 | 106 | // connect any dis nodes 107 | let unconnected_node_indices: Vec<_> = netlist 108 | .graph 109 | .node_indices() 110 | .filter(|node_idx| netlist.graph.neighbors(*node_idx).count() == 0) 111 | .collect(); 112 | 113 | let connected_node_indices: Vec<_> = netlist 114 | .graph 115 | .node_indices() 116 | .filter(|node_idx| netlist.graph.neighbors(*node_idx).count() > 0) 117 | .collect(); 118 | 119 | for unconnected_node_idx in unconnected_node_indices { 120 | let connected_node_idx = connected_node_indices 121 | .choose(&mut rng) 122 | .expect("No connected nodes found"); 123 | 124 | netlist 125 | .graph 126 | .add_edge(*connected_node_idx, unconnected_node_idx, ()); 127 | } 128 | 129 | netlist 130 | } 131 | -------------------------------------------------------------------------------- /src/placer.rs: -------------------------------------------------------------------------------- 1 | use std::process::Command; 2 | 3 | use rand::seq::SliceRandom; 4 | use rand::Rng; 5 | use rayon::prelude::*; 6 | use rustworkx_core::petgraph::visit::EdgeRef; 7 | use tempfile::tempdir; 8 | 9 | use super::fpga_layout::*; 10 | use super::netlist::*; 11 | 12 | use rustc_hash::FxHashMap; 13 | use rustc_hash::FxHashSet; 14 | 15 | use itertools::Itertools; 16 | 17 | #[derive(Debug, Clone, Copy)] 18 | pub enum PlacementAction { 19 | Move, 20 | Swap, 21 | MoveDirected, 22 | } 23 | 24 | #[derive(Debug, Clone)] 25 | pub struct PlacementSolution<'a> { 26 | pub layout: &'a FPGALayout, 27 | pub netlist: &'a NetlistGraph, 28 | pub solution_map: FxHashMap, 29 | } 30 | 31 | impl<'a> PlacementSolution<'a> { 32 | pub fn new(layout: &'a FPGALayout, netlist: &'a NetlistGraph) -> Self { 33 | Self { 34 | layout, 35 | netlist, 36 | solution_map: FxHashMap::default(), 37 | } 38 | } 39 | 40 | pub fn action_move(&mut self) { 41 | let mut rng = rand::thread_rng(); 42 | 43 | // Randomly select a node 44 | let node = match self.netlist.all_nodes().choose(&mut rng) { 45 | Some(n) => *n, 46 | None => return, 47 | }; 48 | 49 | // Get possible sites 50 | let possible_sites = self.get_possible_sites(node.macro_type); 51 | 52 | // Return if there are no possible sites 53 | if possible_sites.is_empty() { 54 | return; 55 | } 56 | 57 | // Randomly select a location 58 | let location = match possible_sites.choose(&mut rng) { 59 | Some(l) => *l, 60 | None => return, 61 | }; 62 | 63 | self.solution_map.insert(*node, location); 64 | } 65 | 66 | pub fn action_swap(&mut self) { 67 | let mut rng = rand::thread_rng(); 68 | 69 | // Randomly select a node (node_a) 70 | let node_a = match self.netlist.all_nodes().choose(&mut rng) { 71 | Some(n) => *n, 72 | None => return, 73 | }; 74 | 75 | // Filter nodes of the same type as node_a 76 | let nodes_same_type = self 77 | .netlist 78 | .all_nodes() 79 | .into_iter() 80 | .filter(|node| node.macro_type == node_a.macro_type) 81 | .collect_vec(); 82 | 83 | // If no nodes of the same type, return 84 | if nodes_same_type.is_empty() { 85 | return; 86 | } 87 | 88 | // Randomly select another node (node_b) of the same type 89 | let node_b = match nodes_same_type.choose(&mut rng) { 90 | Some(n) => *n, 91 | None => return, 92 | }; 93 | 94 | // Clone the locations first to avoid borrowing issues 95 | let loc_a = self.solution_map.get(node_a).cloned(); 96 | let loc_b = self.solution_map.get(node_b).cloned(); 97 | 98 | // Perform the swap 99 | if let (Some(loc_a), Some(loc_b)) = (loc_a, loc_b) { 100 | self.solution_map.insert(*node_a, loc_b); 101 | self.solution_map.insert(*node_b, loc_a); 102 | } 103 | } 104 | 105 | pub fn action_move_directed(&mut self) { 106 | let node_count = self.netlist.graph.node_count() as u32; 107 | 108 | if node_count == 0 { 109 | panic!("No nodes in netlist; cannot compute mean for MOVE_DIRECTED"); 110 | } 111 | let x_mean = self 112 | .netlist 113 | .all_nodes() 114 | .iter() 115 | .map(|node| self.solution_map.get(node).unwrap().x) 116 | .sum::() 117 | / node_count; 118 | 119 | let y_mean = self 120 | .netlist 121 | .all_nodes() 122 | .iter() 123 | .map(|node| self.solution_map.get(node).unwrap().y) 124 | .sum::() 125 | / node_count; 126 | 127 | let mut rng = rand::thread_rng(); 128 | 129 | // pick a random node 130 | let node = self.netlist.all_nodes()[rng.gen_range(0..node_count as usize)]; 131 | 132 | let valid_locations = self.get_possible_sites(node.macro_type); 133 | let valid_closest_location = valid_locations 134 | .iter() 135 | .min_by(|a, b| { 136 | let a_distance = 137 | (a.x as i32 - x_mean as i32).abs() + (a.y as i32 - y_mean as i32).abs(); 138 | let b_distance = 139 | (b.x as i32 - x_mean as i32).abs() + (b.y as i32 - y_mean as i32).abs(); 140 | a_distance.cmp(&b_distance) 141 | }) 142 | .unwrap(); 143 | 144 | // if the new location is futher away from the mean than the current location, return 145 | let current_location = self.solution_map.get(node).unwrap(); 146 | let current_distance = (current_location.x as i32 - x_mean as i32).abs() 147 | + (current_location.y as i32 - y_mean as i32).abs(); 148 | let new_distance = (valid_closest_location.x as i32 - x_mean as i32).abs() 149 | + (valid_closest_location.y as i32 - y_mean as i32).abs(); 150 | if new_distance > current_distance { 151 | return; 152 | } 153 | 154 | self.solution_map.insert(*node, *valid_closest_location); 155 | } 156 | 157 | pub fn action(&mut self, action: PlacementAction) { 158 | match action { 159 | PlacementAction::Move => self.action_move(), 160 | PlacementAction::Swap => self.action_swap(), 161 | PlacementAction::MoveDirected => self.action_move_directed(), 162 | } 163 | } 164 | 165 | pub fn cost_bb(&self) -> f32 { 166 | let mut cost = 0; 167 | 168 | for edge in self.netlist.graph.edge_references() { 169 | let source_idx = edge.source(); 170 | let target_idx = edge.target(); 171 | 172 | let source = self.netlist.graph.node_weight(source_idx).unwrap(); 173 | let target = self.netlist.graph.node_weight(target_idx).unwrap(); 174 | 175 | let source_location = self.solution_map.get(source).unwrap(); 176 | let target_location = self.solution_map.get(target).unwrap(); 177 | 178 | let x_distance = source_location.x.abs_diff(target_location.x); 179 | let y_distance = source_location.y.abs_diff(target_location.y); 180 | 181 | let distance = x_distance + y_distance; 182 | cost += distance; 183 | } 184 | 185 | cost as f32 186 | } 187 | 188 | pub fn render_svg(&self) -> String { 189 | let mut svg = String::new(); 190 | 191 | svg.push_str(&format!( 192 | "\n", 193 | self.layout.width * 100, 194 | self.layout.height * 100 195 | )); 196 | 197 | // draw the white background manually 198 | svg.push_str(&format!( 199 | "\t\n", 200 | 0, 201 | 0, 202 | self.layout.width * 100, 203 | self.layout.height * 100 204 | )); 205 | 206 | // draw boxes for each location 207 | for x in 0..self.layout.width { 208 | for y in 0..self.layout.height { 209 | let layout_type = self.layout.get(&FPGALayoutCoordinate::new(x, y)).unwrap(); 210 | 211 | let color = match layout_type { 212 | FPGALayoutType::MacroType(MacroType::CLB) => "red", 213 | FPGALayoutType::MacroType(MacroType::DSP) => "blue", 214 | FPGALayoutType::MacroType(MacroType::BRAM) => "green", 215 | FPGALayoutType::MacroType(MacroType::IO) => "yellow", 216 | FPGALayoutType::EMPTY => "gray", 217 | }; 218 | 219 | svg.push_str(&format!( 220 | "\t\n", 221 | x * 100, 222 | y * 100, 223 | color 224 | )); 225 | } 226 | } 227 | 228 | // draw boxes for each netlist node 229 | for (node, location) in self.solution_map.iter() { 230 | let color = match node.macro_type { 231 | MacroType::CLB => "red", 232 | MacroType::DSP => "blue", 233 | MacroType::BRAM => "green", 234 | MacroType::IO => "yellow", 235 | }; 236 | 237 | svg.push_str(&format!( 238 | "\t\n", 239 | location.x * 100, 240 | location.y * 100, 241 | color 242 | )); 243 | 244 | svg.push_str(&format!( 245 | "\t{}\n", 246 | location.x * 100 + 10, 247 | location.y * 100 + 70, 248 | node.id 249 | )); 250 | } 251 | 252 | // draw lines for each netlist edge 253 | for edge in self.netlist.graph.edge_references() { 254 | let source_idx = edge.source(); 255 | let target_idx = edge.target(); 256 | 257 | let source = self.netlist.graph.node_weight(source_idx).unwrap(); 258 | let target = self.netlist.graph.node_weight(target_idx).unwrap(); 259 | 260 | let source_location = self.solution_map.get(source).unwrap(); 261 | let target_location = self.solution_map.get(target).unwrap(); 262 | 263 | svg.push_str(&format!( 264 | "\t\n", 265 | source_location.x * 100 + 50, 266 | source_location.y * 100 + 50, 267 | target_location.x * 100 + 50, 268 | target_location.y * 100 + 50 269 | )); 270 | } 271 | 272 | svg.push_str("\n"); 273 | 274 | svg 275 | } 276 | 277 | pub fn get_unplaced_nodes(&self) -> Vec { 278 | let mut unplaced_nodes: Vec = Vec::new(); 279 | 280 | for node in self.netlist.graph.node_weights() { 281 | if !self.solution_map.contains_key(node) { 282 | unplaced_nodes.push(*node); 283 | } 284 | } 285 | 286 | unplaced_nodes 287 | } 288 | 289 | pub fn get_possible_sites(&self, macro_type: MacroType) -> Vec { 290 | let mut possible_sites = Vec::new(); 291 | 292 | let mut placed_locations = FxHashSet::default(); 293 | for location in self.solution_map.values() { 294 | placed_locations.insert(*location); 295 | } 296 | 297 | for x in 0..self.layout.width { 298 | for y in 0..self.layout.height { 299 | // check if the location is unplaced 300 | if placed_locations.contains(&FPGALayoutCoordinate::new(x, y)) { 301 | continue; 302 | } 303 | 304 | let layout_type = self 305 | .layout 306 | .map 307 | .get(&FPGALayoutCoordinate::new(x, y)) 308 | .unwrap(); 309 | 310 | match layout_type { 311 | FPGALayoutType::MacroType(layout_macro_type) => { 312 | if layout_macro_type == ¯o_type { 313 | possible_sites.push(FPGALayoutCoordinate::new(x, y)); 314 | } 315 | } 316 | FPGALayoutType::EMPTY => {} 317 | } 318 | } 319 | } 320 | 321 | possible_sites 322 | } 323 | 324 | pub fn place_node(&mut self, node: NetlistNode, location: FPGALayoutCoordinate) { 325 | self.solution_map.insert(node, location); 326 | } 327 | 328 | pub fn valid(&self) -> bool { 329 | // let netlist_nodes: Vec = self.netlist.all_nodes(); 330 | let netlist_nodes = self.netlist.graph.node_weights().collect_vec(); 331 | let netlist_nodes_ids = netlist_nodes 332 | .iter() 333 | .map(|node| node.id) 334 | .collect::>(); 335 | 336 | // Check that all the nodes in the netlist are in the solution map 337 | for node in self.netlist.graph.node_weights() { 338 | if !self.solution_map.contains_key(node) { 339 | return false; 340 | } 341 | } 342 | 343 | // Check that all the nodes in the solution map are in the netlist 344 | for node in self.solution_map.keys() { 345 | if !netlist_nodes_ids.contains(&node.id) { 346 | return false; 347 | } 348 | } 349 | 350 | // check that each location in the layout is only used once 351 | let mut used_locations = FxHashSet::default(); 352 | for location in self.solution_map.values() { 353 | if used_locations.contains(location) { 354 | return false; 355 | } 356 | used_locations.insert(*location); 357 | } 358 | 359 | // check that each node in the netlist is only used once 360 | let mut used_nodes = FxHashSet::default(); 361 | for node in self.solution_map.keys() { 362 | if used_nodes.contains(node) { 363 | return false; 364 | } 365 | used_nodes.insert(*node); 366 | } 367 | 368 | // check that nodes are placed on the correct type of macro 369 | for (node, location) in self.solution_map.iter() { 370 | let layout_type: FPGALayoutType = self.layout.get(location).unwrap(); 371 | 372 | match layout_type { 373 | FPGALayoutType::MacroType(macro_type) => { 374 | if node.macro_type != macro_type { 375 | return false; 376 | } 377 | } 378 | FPGALayoutType::EMPTY => return false, 379 | } 380 | } 381 | 382 | true 383 | } 384 | } 385 | 386 | pub enum InitialPlacerMethod { 387 | Random, 388 | Greedy, 389 | } 390 | 391 | pub fn gen_random_placement<'a>( 392 | layout: &'a FPGALayout, 393 | netlist: &'a NetlistGraph, 394 | ) -> PlacementSolution<'a> { 395 | let mut solution = PlacementSolution::new(layout, netlist); 396 | 397 | let mut rng = rand::thread_rng(); 398 | 399 | let count_summary_layout = solution.layout.count_summary(); 400 | let count_summary_netlist = solution.netlist.count_summary(); 401 | 402 | for ¯o_type in &[ 403 | MacroType::CLB, 404 | MacroType::DSP, 405 | MacroType::BRAM, 406 | MacroType::IO, 407 | ] { 408 | assert!( 409 | count_summary_layout 410 | .get(&FPGALayoutType::MacroType(macro_type)) 411 | .unwrap() 412 | >= count_summary_netlist.get(¯o_type).unwrap() 413 | ); 414 | } 415 | 416 | for node in solution.netlist.all_nodes() { 417 | let possible_sites = solution.get_possible_sites(node.macro_type); 418 | let location: FPGALayoutCoordinate = possible_sites[rng.gen_range(0..possible_sites.len())]; 419 | solution.place_node(*node, location); 420 | } 421 | 422 | assert!(solution.valid()); 423 | 424 | solution 425 | } 426 | 427 | pub fn gen_greedy_placement<'a>( 428 | layout: &'a FPGALayout, 429 | netlist: &'a NetlistGraph, 430 | ) -> PlacementSolution<'a> { 431 | // place nodes in the first spot in the layout closest to the origin (0,0) which is the top left corner 432 | 433 | let mut solution = PlacementSolution::new(layout, netlist); 434 | 435 | let count_summary_layout = solution.layout.count_summary(); 436 | let count_summary_netlist = solution.netlist.count_summary(); 437 | 438 | for ¯o_type in &[ 439 | MacroType::CLB, 440 | MacroType::DSP, 441 | MacroType::BRAM, 442 | MacroType::IO, 443 | ] { 444 | assert!( 445 | count_summary_layout 446 | .get(&FPGALayoutType::MacroType(macro_type)) 447 | .unwrap() 448 | >= count_summary_netlist.get(¯o_type).unwrap() 449 | ); 450 | } 451 | 452 | let nodes = solution.netlist.all_nodes(); 453 | for node in nodes { 454 | let possible_sites = solution.get_possible_sites(node.macro_type); 455 | // get the site with the min manhattan distance to the origin (0,0) 456 | let location = possible_sites 457 | .iter() 458 | .min_by(|a, b| { 459 | let a_distance: u32 = a.x + a.y; 460 | let b_distance = b.x + b.y; 461 | a_distance.cmp(&b_distance) 462 | }) 463 | .unwrap(); 464 | 465 | solution.place_node(*node, *location); 466 | } 467 | 468 | assert!(solution.valid()); 469 | 470 | solution 471 | } 472 | 473 | pub fn gen_initial_placement<'a>( 474 | layout: &'a FPGALayout, 475 | netlist: &'a NetlistGraph, 476 | method: InitialPlacerMethod, 477 | ) -> PlacementSolution<'a> { 478 | match method { 479 | InitialPlacerMethod::Random => gen_random_placement(layout, netlist), 480 | InitialPlacerMethod::Greedy => gen_greedy_placement(layout, netlist), 481 | } 482 | } 483 | 484 | #[derive(Clone)] 485 | pub struct Renderer { 486 | pub svg_renders: Vec, 487 | } 488 | 489 | impl Default for Renderer { 490 | fn default() -> Self { 491 | Self::new() 492 | } 493 | } 494 | 495 | impl Renderer { 496 | pub fn new() -> Renderer { 497 | Renderer { 498 | svg_renders: Vec::new(), 499 | } 500 | } 501 | 502 | pub fn add_frame(&mut self, svg: String) { 503 | self.svg_renders.push(svg); 504 | } 505 | 506 | pub fn render_to_video( 507 | self, 508 | output_name: &str, 509 | output_dir: &str, 510 | framerate: f64, 511 | every_n_frames: usize, 512 | make_gif: bool, 513 | ) { 514 | let dir = tempdir().unwrap(); 515 | let frame_dir = dir.path().join("frames"); 516 | std::fs::create_dir(&frame_dir).unwrap(); 517 | 518 | let mut input_frames_svg_paths = Vec::new(); 519 | 520 | for (frame_number, svg) in self.svg_renders.iter().enumerate() { 521 | if frame_number % every_n_frames != 0 { 522 | continue; 523 | } 524 | let frame_fp = frame_dir.join(format!("frame_{}.svg", frame_number)); 525 | input_frames_svg_paths.push(frame_fp.clone()); 526 | std::fs::write(&frame_fp, svg).expect("Unable to write file"); 527 | } 528 | 529 | // rename the every_n_frames frames to be sequential to not confuse ffmpeg 530 | let mut input_frames_svg_paths_renumbered = Vec::new(); 531 | for (frame_number, svg_fp) in input_frames_svg_paths.iter().enumerate() { 532 | let new_fp = frame_dir.join(format!("frame_{}.svg", frame_number)); 533 | std::fs::rename(svg_fp, &new_fp).expect("Unable to rename file"); 534 | input_frames_svg_paths_renumbered.push(new_fp); 535 | } 536 | 537 | // convert the frames to pngs 538 | input_frames_svg_paths_renumbered 539 | .par_iter() 540 | .for_each(|svg_fp| { 541 | let png_fp = svg_fp.with_extension("png"); 542 | println!("Converting {:?} to {:?} ... ", svg_fp, png_fp); 543 | let _output: std::process::Output = std::process::Command::new("magick") 544 | .arg("convert") 545 | .arg("-size") 546 | .arg("800x800") 547 | .arg(svg_fp) 548 | .arg(png_fp) 549 | .output() 550 | .expect("failed to execute magick"); 551 | }); 552 | 553 | // use ffmpeg to convert the frames to a video 554 | let mut ffmpeg_cmd = Command::new("ffmpeg"); 555 | ffmpeg_cmd.arg("-y"); 556 | ffmpeg_cmd.arg("-framerate"); 557 | ffmpeg_cmd.arg(format!("{}", framerate)); 558 | ffmpeg_cmd.arg("-i"); 559 | ffmpeg_cmd.arg(frame_dir.join("frame_%d.png").to_str().unwrap()); 560 | ffmpeg_cmd.arg("-c:v"); 561 | ffmpeg_cmd.arg("libx264"); 562 | ffmpeg_cmd.arg("-pix_fmt"); 563 | ffmpeg_cmd.arg("yuv420p"); 564 | ffmpeg_cmd.arg(format!("{}/{}.mp4", output_dir, output_name)); 565 | 566 | let child = ffmpeg_cmd.spawn().expect("failed to execute ffmpeg"); 567 | child.wait_with_output().expect("failed to wait on ffmpeg"); 568 | 569 | if make_gif { 570 | // use ffmpeg to convert the frames to a gif 571 | let mut ffmpeg_cmd = Command::new("ffmpeg"); 572 | ffmpeg_cmd.arg("-y"); 573 | ffmpeg_cmd.arg("-framerate"); 574 | ffmpeg_cmd.arg(format!("{}", framerate)); 575 | ffmpeg_cmd.arg("-i"); 576 | ffmpeg_cmd.arg(frame_dir.join("frame_%d.png").to_str().unwrap()); 577 | 578 | // Optimize gif size using rescaling and color pallet reduction 579 | ffmpeg_cmd.arg("-filter_complex"); 580 | ffmpeg_cmd.arg("scale=iw/2:-1,split [a][b];[a] palettegen=stats_mode=diff:max_colors=32[p]; [b][p] paletteuse=dither=bayer"); 581 | 582 | ffmpeg_cmd.arg(format!("{}/{}.gif", output_dir, output_name)); 583 | 584 | let child = ffmpeg_cmd.spawn().expect("failed to execute ffmpeg"); 585 | child.wait_with_output().expect("failed to wait on ffmpeg"); 586 | } 587 | } 588 | } 589 | 590 | pub struct PlacerOutput<'a> { 591 | pub initial_solution: PlacementSolution<'a>, 592 | pub final_solution: PlacementSolution<'a>, 593 | pub x_steps: Vec, 594 | pub y_cost: Vec, 595 | pub renderer: Option, 596 | } 597 | 598 | pub fn fast_sa_placer( 599 | initial_solution: PlacementSolution, 600 | n_steps: u32, 601 | n_neighbors: usize, // number of neighbors to explore at each step 602 | verbose: bool, 603 | render: bool, 604 | ) -> PlacerOutput { 605 | let mut renderer = Renderer::new(); 606 | 607 | let mut current_solution = initial_solution.clone(); 608 | 609 | let mut rng = rand::thread_rng(); 610 | let actions: &[PlacementAction] = &[ 611 | PlacementAction::Move, 612 | PlacementAction::Swap, 613 | PlacementAction::MoveDirected, 614 | ]; 615 | 616 | let mut x_steps = Vec::new(); 617 | let mut y_cost = Vec::new(); 618 | 619 | for _i in 0..n_steps { 620 | x_steps.push(_i); 621 | y_cost.push(current_solution.cost_bb()); 622 | if render { 623 | renderer.add_frame(current_solution.render_svg()); 624 | } 625 | 626 | // randomly select actions 627 | let actions: Vec<_> = actions.choose_multiple(&mut rng, n_neighbors).collect(); 628 | 629 | let new_solutions: Vec<_> = actions 630 | // .into_par_iter() 631 | .into_iter() 632 | .map(|action| { 633 | let mut new_solution = current_solution.clone(); 634 | new_solution.action(*action); 635 | new_solution 636 | }) 637 | .collect(); 638 | 639 | let best_solution = new_solutions 640 | .iter() 641 | .min_by(|sol1, sol2| { 642 | (sol1.cost_bb() - current_solution.cost_bb()) 643 | .partial_cmp(&(sol2.cost_bb() - current_solution.cost_bb())) 644 | .unwrap() 645 | }) 646 | .unwrap(); 647 | 648 | let best_delta = best_solution.cost_bb() - current_solution.cost_bb(); 649 | let mut delta = 0.0; 650 | if best_delta < 0.0 { 651 | current_solution = best_solution.clone(); 652 | delta = best_delta; 653 | } 654 | 655 | if verbose && _i % 10 == 0 { 656 | println!("Current Itteration: {:?}", _i); 657 | println!("Delta Cost: {:?}", delta); 658 | println!("Current Cost: {:?}", current_solution.cost_bb()); 659 | } 660 | } 661 | 662 | if render { 663 | renderer.add_frame(current_solution.render_svg()); 664 | } 665 | 666 | PlacerOutput { 667 | initial_solution: initial_solution.clone(), 668 | final_solution: current_solution.clone(), 669 | x_steps, 670 | y_cost, 671 | renderer: if render { Some(renderer) } else { None }, 672 | } 673 | } 674 | --------------------------------------------------------------------------------