@@ -1520,6 +1520,8 @@ void FlexDR::searchRepair(const SearchRepairArgs& args)
15201520 const int mazeEndIter = args.mazeEndIter ;
15211521 const frUInt4 workerDRCCost = args.workerDRCCost ;
15221522 const frUInt4 workerMarkerCost = args.workerMarkerCost ;
1523+ const frUInt4 workerFixedShapeCost = args.workerFixedShapeCost ;
1524+ const float workerMarkerDecay = args.workerMarkerDecay ;
15231525 const int ripupMode = args.ripupMode ;
15241526 const bool followGuide = args.followGuide ;
15251527
@@ -1607,7 +1609,10 @@ void FlexDR::searchRepair(const SearchRepairArgs& args)
16071609 worker->setFollowGuide (followGuide);
16081610 // TODO: only pass to relevant workers
16091611 worker->setGraphics (graphics_.get ());
1610- worker->setCost (workerDRCCost, workerMarkerCost);
1612+ worker->setCost (workerDRCCost,
1613+ workerMarkerCost,
1614+ workerFixedShapeCost,
1615+ workerMarkerDecay);
16111616
16121617 int batchIdx = (xIdx % batchStepX) * batchStepY + yIdx % batchStepY;
16131618 if (workers[batchIdx].empty ()
@@ -1967,71 +1972,75 @@ static std::vector<FlexDR::SearchRepairArgs> strategy()
19671972{
19681973 const fr::frUInt4 shapeCost = ROUTESHAPECOST;
19691974
1970- return {/* 0 */ {7 , 0 , 3 , shapeCost, 0 /* MARKERCOST*/ , 1 , true },
1971- /* 1 */ {7 , -2 , 3 , shapeCost, shapeCost /* MARKERCOST*/ , 1 , true },
1972- /* 2 */ {7 , -5 , 3 , shapeCost, shapeCost /* MAARKERCOST*/ , 1 , true },
1973- /* 3 */ {7 , 0 , 8 , shapeCost, MARKERCOST, 0 , false },
1974- /* 4 */ {7 , -1 , 8 , shapeCost, MARKERCOST, 0 , false },
1975- /* 5 */ {7 , -2 , 8 , shapeCost, MARKERCOST, 0 , false },
1976- /* 6 */ {7 , -3 , 8 , shapeCost, MARKERCOST, 0 , false },
1977- /* 7 */ {7 , -4 , 8 , shapeCost, MARKERCOST, 0 , false },
1978- /* 8 */ {7 , -5 , 8 , shapeCost, MARKERCOST, 0 , false },
1979- /* 9 */ {7 , -6 , 8 , shapeCost, MARKERCOST, 0 , false },
1980- /* 10 */ {7 , 0 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1981- /* 11 */ {7 , -1 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1982- /* 12 */ {7 , -2 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1983- /* 13 */ {7 , -3 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1984- /* 14 */ {7 , -4 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1985- /* 15 */ {7 , -5 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1986- /* 16 */ {7 , -6 , 8 , shapeCost * 2 , MARKERCOST, 0 , false },
1987- /* 17 */ {7 , -3 , 8 , shapeCost, MARKERCOST, 1 , false },
1988- /* 18 */ {7 , 0 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1989- /* 19 */ {7 , -1 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1990- /* 20 */ {7 , -2 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1991- /* 21 */ {7 , -3 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1992- /* 22 */ {7 , -4 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1993- /* 23 */ {7 , -5 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1994- /* 24 */ {7 , -6 , 8 , shapeCost * 4 , MARKERCOST, 0 , false },
1995- /* 25 */ {5 , -2 , 8 , shapeCost, MARKERCOST, 1 , false },
1996- /* 26 */ {7 , 0 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
1997- /* 27 */ {7 , -1 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
1998- /* 28 */ {7 , -2 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
1999- /* 29 */ {7 , -3 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
2000- /* 30 */ {7 , -4 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
2001- /* 31 */ {7 , -5 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
2002- /* 32 */ {7 , -6 , 8 , shapeCost * 8 , MARKERCOST * 2 , 0 , false },
2003- /* 33 */ {3 , -1 , 8 , shapeCost, MARKERCOST, 1 , false },
2004- /* 34 */ {7 , 0 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2005- /* 35 */ {7 , -1 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2006- /* 36 */ {7 , -2 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2007- /* 37 */ {7 , -3 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2008- /* 38 */ {7 , -4 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2009- /* 39 */ {7 , -5 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2010- /* 40 */ {7 , -6 , 8 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2011- /* 41 */ {3 , -2 , 8 , shapeCost, MARKERCOST, 1 , false },
2012- /* 42 */ {7 , 0 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2013- /* 43 */ {7 , -1 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2014- /* 44 */ {7 , -2 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2015- /* 45 */ {7 , -3 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2016- /* 46 */ {7 , -4 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2017- /* 47 */ {7 , -5 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2018- /* 48 */ {7 , -6 , 16 , shapeCost * 16 , MARKERCOST * 4 , 0 , false },
2019- /* 49 */ {3 , -0 , 8 , shapeCost, MARKERCOST, 1 , false },
2020- /* 50 */ {7 , 0 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2021- /* 51 */ {7 , -1 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2022- /* 52 */ {7 , -2 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2023- /* 53 */ {7 , -3 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2024- /* 54 */ {7 , -4 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2025- /* 55 */ {7 , -5 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2026- /* 56 */ {7 , -6 , 32 , shapeCost * 32 , MARKERCOST * 8 , 0 , false },
2027- /* 57 */ {3 , -1 , 8 , shapeCost, MARKERCOST, 1 , false },
2028- /* 58 */ {7 , 0 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2029- /* 59 */ {7 , -1 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2030- /* 60 */ {7 , -2 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2031- /* 61 */ {7 , -3 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2032- /* 62 */ {7 , -4 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2033- /* 63 */ {7 , -5 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false },
2034- /* 64 */ {7 , -6 , 64 , shapeCost * 64 , MARKERCOST * 16 , 0 , false }};
1975+ // clang-format off
1976+ return {
1977+ {7 , 0 , 3 , shapeCost, 0 , shapeCost, 0.950 , 1 , true }, // 0
1978+ {7 , -2 , 3 , shapeCost, shapeCost, shapeCost, 0.950 , 1 , true }, // 1
1979+ {7 , -5 , 3 , shapeCost, shapeCost, shapeCost, 0.950 , 1 , true }, // 2
1980+ {7 , 0 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 3
1981+ {7 , -1 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 4
1982+ {7 , -2 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 5
1983+ {7 , -3 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 6
1984+ {7 , -4 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 7
1985+ {7 , -5 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 8
1986+ {7 , -6 , 8 , shapeCost, MARKERCOST, 2 * shapeCost, 0.950 , 0 , false }, // 9
1987+ {7 , 0 , 8 , 2 * shapeCost, MARKERCOST, 3 * shapeCost, 0.950 , 0 , false }, // 10
1988+ {7 , -1 , 8 , 2 * shapeCost, MARKERCOST, 3 * shapeCost, 0.950 , 0 , false }, // 11
1989+ {7 , -2 , 8 , 2 * shapeCost, MARKERCOST, 3 * shapeCost, 0.950 , 0 , false }, // 12
1990+ {7 , -3 , 8 , 2 * shapeCost, MARKERCOST, 3 * shapeCost, 0.950 , 0 , false }, // 13
1991+ {7 , -4 , 8 , 2 * shapeCost, MARKERCOST, 3 * shapeCost, 0.950 , 0 , false }, // 14
1992+ {7 , -5 , 8 , 2 * shapeCost, MARKERCOST, 4 * shapeCost, 0.950 , 0 , false }, // 15
1993+ {7 , -6 , 8 , 2 * shapeCost, MARKERCOST, 4 * shapeCost, 0.950 , 0 , false }, // 16
1994+ {7 , -3 , 8 , shapeCost, MARKERCOST, 4 * shapeCost, 0.950 , 1 , false }, // 17
1995+ {7 , 0 , 8 , 4 * shapeCost, MARKERCOST, 4 * shapeCost, 0.950 , 0 , false }, // 18
1996+ {7 , -1 , 8 , 4 * shapeCost, MARKERCOST, 4 * shapeCost, 0.950 , 0 , false }, // 19
1997+ {7 , -2 , 8 , 4 * shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 20
1998+ {7 , -3 , 8 , 4 * shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 21
1999+ {7 , -4 , 8 , 4 * shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 22
2000+ {7 , -5 , 8 , 4 * shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 23
2001+ {7 , -6 , 8 , 4 * shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 24
2002+ {5 , -2 , 8 , shapeCost, MARKERCOST, 10 * shapeCost, 0.950 , 1 , false }, // 25
2003+ {7 , 0 , 8 , 8 * shapeCost, 2 * MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 26
2004+ {7 , -1 , 8 , 8 * shapeCost, 2 * MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 27
2005+ {7 , -2 , 8 , 8 * shapeCost, 2 * MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 28
2006+ {7 , -3 , 8 , 8 * shapeCost, 2 * MARKERCOST, 10 * shapeCost, 0.950 , 0 , false }, // 29
2007+ {7 , -4 , 8 , 8 * shapeCost, 2 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 30
2008+ {7 , -5 , 8 , 8 * shapeCost, 2 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 31
2009+ {7 , -6 , 8 , 8 * shapeCost, 2 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 32
2010+ {3 , -1 , 8 , shapeCost, MARKERCOST, 50 * shapeCost, 0.950 , 1 , false }, // 33
2011+ {7 , 0 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 34
2012+ {7 , -1 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 35
2013+ {7 , -2 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 36
2014+ {7 , -3 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 37
2015+ {7 , -4 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 38
2016+ {7 , -5 , 8 , 16 * shapeCost, 4 * MARKERCOST, 50 * shapeCost, 0.950 , 0 , false }, // 39
2017+ {7 , -6 , 8 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 40
2018+ {3 , -2 , 8 , shapeCost, MARKERCOST, 100 * shapeCost, 0.990 , 1 , false }, // 41
2019+ {7 , 0 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 42
2020+ {7 , -1 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 43
2021+ {7 , -2 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 44
2022+ {7 , -3 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 45
2023+ {7 , -4 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 46
2024+ {7 , -5 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 47
2025+ {7 , -6 , 16 , 16 * shapeCost, 4 * MARKERCOST, 100 * shapeCost, 0.990 , 0 , false }, // 48
2026+ {3 , -0 , 8 , shapeCost, MARKERCOST, 100 * shapeCost, 0.990 , 1 , false }, // 49
2027+ {7 , 0 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 50
2028+ {7 , -1 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 51
2029+ {7 , -2 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 52
2030+ {7 , -3 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 53
2031+ {7 , -4 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 54
2032+ {7 , -5 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 55
2033+ {7 , -6 , 32 , 32 * shapeCost, 8 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 56
2034+ {3 , -1 , 8 , shapeCost, MARKERCOST, 100 * shapeCost, 0.999 , 1 , false }, // 57
2035+ {7 , 0 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 58
2036+ {7 , -1 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 59
2037+ {7 , -2 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 60
2038+ {7 , -3 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 61
2039+ {7 , -4 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 62
2040+ {7 , -5 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false }, // 63
2041+ {7 , -6 , 64 , 64 * shapeCost, 16 * MARKERCOST, 100 * shapeCost, 0.999 , 0 , false } // 64
2042+ };
2043+ // clang-format on
20352044}
20362045
20372046void addRectToPolySet (gtl::polygon_90_set_data<frCoord>& polySet, Rect rect)
@@ -2167,26 +2176,6 @@ int FlexDR::main()
21672176 frTime t;
21682177
21692178 for (auto & args : strategy ()) {
2170- if (iter_ < 3 )
2171- FIXEDSHAPECOST = ROUTESHAPECOST;
2172- else if (iter_ < 10 )
2173- FIXEDSHAPECOST = 2 * ROUTESHAPECOST;
2174- else if (iter_ < 15 )
2175- FIXEDSHAPECOST = 3 * ROUTESHAPECOST;
2176- else if (iter_ < 20 )
2177- FIXEDSHAPECOST = 4 * ROUTESHAPECOST;
2178- else if (iter_ < 30 )
2179- FIXEDSHAPECOST = 10 * ROUTESHAPECOST;
2180- else if (iter_ < 40 )
2181- FIXEDSHAPECOST = 50 * ROUTESHAPECOST;
2182- else
2183- FIXEDSHAPECOST = 100 * ROUTESHAPECOST;
2184-
2185- if (iter_ == 40 )
2186- MARKERDECAY = 0.99 ;
2187- if (iter_ == 50 )
2188- MARKERDECAY = 0.999 ;
2189-
21902179 int clipSize = args.size ;
21912180 if (args.ripupMode != 1 ) {
21922181 if (increaseClipsize_) {
@@ -2307,6 +2296,8 @@ void FlexDRWorker::serialize(Archive& ar, const unsigned int version)
23072296 (ar) & ripupMode_;
23082297 (ar) & workerDRCCost_;
23092298 (ar) & workerMarkerCost_;
2299+ (ar) & workerFixedShapeCost_;
2300+ (ar) & workerMarkerDecay_;
23102301 (ar) & pinCnt_;
23112302 (ar) & initNumMarkers_;
23122303 (ar) & apSVia_;
0 commit comments