From 8fa56caca0e71afab65ef6da604c11fe98b56e00 Mon Sep 17 00:00:00 2001 From: Justin Kunimune Date: Fri, 18 Aug 2017 15:10:05 -1000 Subject: [PATCH] I attempted to fix the optimizer I failed. I can't even reproduce the problem right now. It's possible I accidentally fixed it earlier. --- output/graph - optimizer.png | Bin 28619 -> 15168 bytes output/parameters.txt | 52 ----------------------------------- src/apps/MapOptimizer.java | 20 ++++++++------ 3 files changed, 11 insertions(+), 61 deletions(-) diff --git a/output/graph - optimizer.png b/output/graph - optimizer.png index 773d3fcb374787404d7b6d8d0cbbc7e6cd51a40d..021d3d326781240648a92e38c71199df5d7264c2 100644 GIT binary patch literal 15168 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 KFM-^D{=Wcza(dzb literal 28619 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

GJfp1`8Pdt45+##A5Zqm7ahBGe09ZW({-Bt?-v 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 S*aB$7QhKTWqDJm*=>GySn_qYU diff --git a/output/parameters.txt b/output/parameters.txt index a95cfd3..c49ab5a 100644 --- a/output/parameters.txt +++ b/output/parameters.txt @@ -1,16 +1,3 @@ -We got the best Tobler projections using: - t0=44.49736479301335; t1=0.00392527452555691; t2=4.500664624872501; (0.0015117117801069964, 0.5789093041902463) - t0=44.4936541545398; t1=0.006548940147121929; t2=4.501433723834101; (0.0014673812200635672, 0.5788382710393578) - t0=44.48951494957488; t1=0.006535013891140196; t2=4.501789852627221; (0.0014673803066007664, 0.578780179204182) - t0=44.48413941124096; t1=0.012476702712649335; t2=4.503413820309772; (0.0013693003620921726, 0.5786674049116084) - t0=44.4774541677433; t1=0.010580178788632821; t2=4.503423182737272; (0.0013981890762588872, 0.5785847209253756) - t0=44.46827397058529; t1=0.016504123873106735; t2=4.505494986993204; (0.001310857178908313, 0.5784155794393526) - t0=44.455563148801275; t1=0.013224165984482283; t2=4.505241030942571; (0.0013577366100977224, 0.5782629984821109) - t0=44.43662231312362; t1=0.02478520699789044; t2=4.509064448636131; (0.0012015924392150326, 0.5779201791225536) - t0=44.40508537139888; t1=0.04837562772586068; t2=4.515090405813822; (9.613815880729862E-4, 0.5773384868436131) - t0=44.34224160187729; t1=0.06951090414375471; t2=4.523060420684118; (8.381115649334689E-4, 0.5763523031518725) - t0=44.124748508786354; t1=0.141539528986101; t2=4.541575156650708; (8.535694173909947E-4, 0.5731007763064535) - We got the best Hyperellipower projections using: t0=2.9805327028160047; t1=1.4620205936408104; t2=1.2260538331901316; (0.02498272791703329, 0.5334608076993929) t0=2.9905920355994238; t1=1.4465014713514734; t2=1.1967256256435732; (0.03043457998723157, 0.5214751201404486) @@ -24,42 +11,3 @@ We got the best Hyperellipower projections using: t0=3.0237399472302613; t1=0.5600288656005254; t2=1.3457090939279759; (0.61978843032033, 0.11003035234367435) t0=3.14353629984587; t1=0.5005076822295891; t2=1.3891880892209763; (0.659949552269144, 0.08727046668993045) -We got the best Tetrapower projections using: - t0=1.9742017849877067; t1=0.3162063133968771; t2=1.7120540423562045; (0.1258252238679622, 0.7005677855491624) - t0=1.962946901115604; t1=0.33643644568151476; t2=1.6376451578369986; (0.11996191382294889, 0.6646835788944014) - t0=1.9482122579017167; t1=0.35820555314261515; t2=1.5596007725493086; (0.12236608915694984, 0.6261805784009753) - t0=1.9235950892509521; t1=0.3844987115570184; t2=1.4616134703187686; (0.13729703578984156, 0.5766312917494608) - t0=0.6078162918738137; t1=1.9184154579992683; t2=0.9374969326053915; (0.41463636119160974, 0.2321352376415144) - t0=0.6768981747546086; t1=1.8569910574056223; t2=0.9687975907818611; (0.39596942962204096, 0.22442292151266904) - t0=0.8181900944465301; t1=1.776744883033544; t2=0.9938680301730116; (0.36146141160554407, 0.222732976480267) - t0=0.8707287786830218; t1=1.6708658507974103; t2=0.9953327713347058; (0.34947850355439064, 0.2144133868329382) - t0=0.8290702635455336; t1=1.5114556757650064; t2=0.9729815284781616; (0.3622144281786425, 0.18867009848372016) - t0=0.7811701429810967; t1=1.2659478546922074; t2=0.9395657968519764; (0.3822474927530909, 0.15551055615753112) - t0=0.776639599429668; t1=1.0310109779059893; t2=0.7730294723435058; (0.4178180981302166, 0.18597107060510343) - -We got the best Tetrafillet projections using: - t0=1.7288505725437506; t1=0.2900860123567215; t2=2.0471999824952634; (0.14694825866595568, 0.5163771543891366) - t0=1.6823776797111454; t1=0.28697384098194645; t2=2.0276944103794334; (0.13811002621138319, 0.5026511615481717) - t0=1.6332138547902728; t1=0.28392500093346573; t2=2.0060174858671074; (0.13073975144149713, 0.4880869584178728) - t0=1.57265871333352; t1=0.2804940342282789; t2=1.9776257697639696; (0.12500803769986443, 0.4700697574887316) - t0=0.8153291409168926; t1=0.44049624114253483; t2=1.8959250549593474; (0.24046500594270506, 0.3416977194269567) - t0=0.8245709478754968; t1=0.46529282362431346; t2=1.8044071372430146; (0.24185954090909334, 0.32318634022044795) - t0=0.8280188390702712; t1=0.49455295305481073; t2=1.694022436723964; (0.24760421972453442, 0.3026571586101631) - t0=0.8163363015495637; t1=0.5314301073295056; t2=1.5595921905114505; (0.2611257175300009, 0.28016520163305947) - t0=0.5009320826127315; t1=1.4734012144606687; t2=1.4197160558087738; (0.32297081636099445, 0.2731240174032427) - t0=0.5186271423635311; t1=1.254469850922547; t2=1.270260869970464; (0.3289844752140432, 0.24460926431841706) - t0=0.5792393092602097; t1=0.9721593452832309; t2=1.162807744683981; (0.33416189872837637, 0.23106563246322284) - -We got the best Tetrachamfer projections using: - t0=1.7853271662440338; t1=0.2831804816469661; t2=2.0280092833265937; (0.16484468546801748, 0.694902216760462) - t0=1.6318105710233075; t1=0.28146710257639906; t2=2.0031455734092605; (0.13962084387127202, 0.6532469343914646) - t0=1.8075069161487942; t1=0.2475287140185909; t2=1.9658015876860677; (0.17093702504913671, 0.6900898048806519) - t0=0.7223330651323909; t1=0.4110649447425505; t2=1.9528460043299454; (0.28230467732058345, 0.48601136854710203) - t0=0.7573115507958637; t1=0.4243808486498466; t2=1.8708944121508928; (0.27508256755764127, 0.47115029033025646) - t0=-1.7106270713623495; t1=-0.008538938591179601; t2=9.338028252128773; (1.0887527217519657, 1.7302599183430785) - t0=0.6639005401748719; t1=0.5014532357333898; t2=1.6275390621683492; (0.3116484423565494, 0.4135437766201649) - t0=0.5462292082742124; t1=1.582020618987002; t2=0.9085007328308023; (0.36334026452533624, 0.3447448125298554) - t0=0.3786532688160591; t1=1.4496054272311163; t2=0.9376127751076488; (0.3999982659592346, 0.31944040411860314) - t0=0.7066517852744312; t1=0.7313487405330719; t2=0.9098285640091461; (0.3696975287491499, 0.2963896674047347) - t0=0.7690859433401585; t1=0.829580616832942; t2=0.9038137953260303; (0.3527548189362114, 0.2983682349953474) - diff --git a/src/apps/MapOptimizer.java b/src/apps/MapOptimizer.java index 8b07e23..c7ccff1 100644 --- a/src/apps/MapOptimizer.java +++ b/src/apps/MapOptimizer.java @@ -52,11 +52,11 @@ import maps.Tobler; */ public class MapOptimizer extends Application { - - private static final Projection[] EXISTING_PROJECTIONS = { Cylindrical.HOBO_DYER, Robinson.ROBINSON, - Cylindrical.PLATE_CARREE, Misc.PEIRCE_QUINCUNCIAL }; - private static final Projection[] PROJECTIONS_TO_OPTIMIZE = { Tobler.TOBLER, MyProjections.HYPERELLIPOWER, - Tetrahedral.TETRAPOWER, Tetrahedral.TETRAFILLET, Tetrahedral.TETRACHAMFER }; + private static final Projection[] EXISTING_PROJECTIONS = { Cylindrical.HOBO_DYER, + Robinson.ROBINSON, Cylindrical.PLATE_CARREE, Misc.PEIRCE_QUINCUNCIAL }; + private static final Projection[] PROJECTIONS_TO_OPTIMIZE = { Tobler.TOBLER, + MyProjections.HYPERELLIPOWER, Tetrahedral.TETRAPOWER, Tetrahedral.TETRAFILLET, + Tetrahedral.TETRACHAMFER }; private static final double[] WEIGHTS = { .083, .20, .33, .50, .71, 1.0, 1.4, 2.0, 3.0, 5.0, 12. }; private static final int NUM_DESCENT = 40; private LineChart chart; @@ -120,7 +120,8 @@ public class MapOptimizer extends Application { final double[] params = new double[proj.getNumParameters()]; for (int i = 0; i < params.length; i++) params[i] = bounds[i][0]; // initialize params - + + bruteForceLoop: while (true) { // start with brute force double[] distortions = proj.avgDistortion(points, params); System.out.println(Arrays.toString(params) + ": " + Arrays.toString(distortions)); @@ -135,7 +136,10 @@ public class MapOptimizer extends Application { } int i; - for (i = 0; i < params.length; i++) { // iterate the parameters + for (i = 0; i <= params.length; i++) { // iterate the parameters + if (i == params.length) + break bruteForceLoop; // if you made it through all the parameters without breaking, you're done! + final double step = (bounds[i][1] - bounds[i][0]) / Math.floor(Math.pow(16, 1. / params.length)); if (params[i] + step < bounds[i][1] + 1e-5) { for (int j = 0; j < i; j++) @@ -144,8 +148,6 @@ public class MapOptimizer extends Application { break; } } - if (i == params.length) - break; // if you made it through the for loop without breaking (finding a parameter to increment), you're done! } final double h = 1e-7;