@mark1russell7/packing 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -3554,32 +3554,2222 @@ function toRects(output, rects, outer) {
3554
3554
  }
3555
3555
  return outer;
3556
3556
  }
3557
- // src/registry.ts
3558
- /** Each strategy of the package. The benchmark starts each one on each input of the corpus. */
3559
- const strategies = Object.freeze([
3560
- rows,
3561
- skyline,
3562
- shelf,
3563
- push,
3564
- maxrects
3565
- ]);
3566
- /** This function gives the strategy with an id. It throws a `RangeError` for an id that the registry does not have. */
3567
- function strategy(id) {
3568
- const found = strategies.find((s) => s.id === id);
3569
- if (found === void 0) throw new RangeError(`The registry has no strategy "${id}".`);
3570
- return found;
3557
+ // src/portfolio-sets.ts
3558
+ /** The table of the per-cell portfolio: the sets of 1, 2 and 3 members of each cell, with their training scores. The run 40652567756 gives it. */
3559
+ const PORTFOLIO_SETS = {
3560
+ "source": {
3561
+ "corpus": "pack-screen-v1",
3562
+ "run": "40652567756",
3563
+ "commit": "f6a489b",
3564
+ "inputs": 1305,
3565
+ "frameMs": 50
3566
+ },
3567
+ "entries": {
3568
+ "rows": {
3569
+ "id": "rows",
3570
+ "strategy": "rows"
3571
+ },
3572
+ "skyline": {
3573
+ "id": "skyline",
3574
+ "strategy": "skyline"
3575
+ },
3576
+ "shelf": {
3577
+ "id": "shelf",
3578
+ "strategy": "shelf"
3579
+ },
3580
+ "shelf-next": {
3581
+ "id": "shelf-next",
3582
+ "strategy": "shelf",
3583
+ "options": {
3584
+ "fit": "next",
3585
+ "sortOrder": "height-desc"
3586
+ }
3587
+ },
3588
+ "shelf-first": {
3589
+ "id": "shelf-first",
3590
+ "strategy": "shelf",
3591
+ "options": {
3592
+ "fit": "first",
3593
+ "sortOrder": "height-desc"
3594
+ }
3595
+ },
3596
+ "shelf-best": {
3597
+ "id": "shelf-best",
3598
+ "strategy": "shelf",
3599
+ "options": {
3600
+ "fit": "best",
3601
+ "sortOrder": "height-desc"
3602
+ }
3603
+ },
3604
+ "maxrects-bssf": {
3605
+ "id": "maxrects-bssf",
3606
+ "strategy": "maxrects",
3607
+ "options": { "rule": "bssf" }
3608
+ },
3609
+ "maxrects-blsf": {
3610
+ "id": "maxrects-blsf",
3611
+ "strategy": "maxrects",
3612
+ "options": { "rule": "blsf" }
3613
+ },
3614
+ "maxrects-baf": {
3615
+ "id": "maxrects-baf",
3616
+ "strategy": "maxrects",
3617
+ "options": { "rule": "baf" }
3618
+ },
3619
+ "maxrects-bl": {
3620
+ "id": "maxrects-bl",
3621
+ "strategy": "maxrects",
3622
+ "options": { "rule": "bl" }
3623
+ },
3624
+ "maxrects-cp": {
3625
+ "id": "maxrects-cp",
3626
+ "strategy": "maxrects",
3627
+ "options": { "rule": "cp" }
3628
+ }
3629
+ },
3630
+ "all": {
3631
+ "inputs": 1305,
3632
+ "thin": false,
3633
+ "sets": {
3634
+ "1": ["maxrects-bl"],
3635
+ "2": ["maxrects-bl", "shelf-best"],
3636
+ "3": [
3637
+ "maxrects-bl",
3638
+ "shelf-best",
3639
+ "maxrects-cp"
3640
+ ]
3641
+ },
3642
+ "train": {
3643
+ "1": {
3644
+ "inputs": 1305,
3645
+ "hardRegret": 0,
3646
+ "excessAreaRegret": .001,
3647
+ "fillRegret": .02,
3648
+ "wins": 838,
3649
+ "winShare": .642,
3650
+ "msMean": 4.92
3651
+ },
3652
+ "2": {
3653
+ "inputs": 1305,
3654
+ "hardRegret": 0,
3655
+ "excessAreaRegret": .001,
3656
+ "fillRegret": .011,
3657
+ "wins": 1033,
3658
+ "winShare": .792,
3659
+ "msMean": 9.582
3660
+ },
3661
+ "3": {
3662
+ "inputs": 1305,
3663
+ "hardRegret": 0,
3664
+ "excessAreaRegret": 0,
3665
+ "fillRegret": .006,
3666
+ "wins": 1126,
3667
+ "winShare": .863,
3668
+ "msMean": 22.228
3669
+ }
3670
+ },
3671
+ "prefixMedianMs": {
3672
+ "1": 1.015,
3673
+ "2": 2.004,
3674
+ "3": 3.074
3675
+ },
3676
+ "defaultMembers": 3
3677
+ },
3678
+ "shapes": {
3679
+ "circle": {
3680
+ "inputs": 210,
3681
+ "thin": false,
3682
+ "sets": {
3683
+ "1": ["maxrects-bl"],
3684
+ "2": ["maxrects-bl", "maxrects-cp"],
3685
+ "3": [
3686
+ "maxrects-bl",
3687
+ "maxrects-cp",
3688
+ "skyline"
3689
+ ]
3690
+ },
3691
+ "train": {
3692
+ "1": {
3693
+ "inputs": 210,
3694
+ "hardRegret": 0,
3695
+ "excessAreaRegret": .002,
3696
+ "fillRegret": .015,
3697
+ "wins": 140,
3698
+ "winShare": .667,
3699
+ "msMean": 10.026
3700
+ },
3701
+ "2": {
3702
+ "inputs": 210,
3703
+ "hardRegret": 0,
3704
+ "excessAreaRegret": 0,
3705
+ "fillRegret": .006,
3706
+ "wins": 162,
3707
+ "winShare": .771,
3708
+ "msMean": 35.829
3709
+ },
3710
+ "3": {
3711
+ "inputs": 210,
3712
+ "hardRegret": 0,
3713
+ "excessAreaRegret": 0,
3714
+ "fillRegret": .003,
3715
+ "wins": 184,
3716
+ "winShare": .876,
3717
+ "msMean": 46.593
3718
+ }
3719
+ },
3720
+ "prefixMedianMs": {
3721
+ "1": 3.441,
3722
+ "2": 7.24,
3723
+ "3": 10.252
3724
+ },
3725
+ "defaultMembers": 3
3726
+ },
3727
+ "convex": {
3728
+ "inputs": 210,
3729
+ "thin": false,
3730
+ "sets": {
3731
+ "1": ["maxrects-bl"],
3732
+ "2": ["maxrects-bl", "shelf-best"],
3733
+ "3": [
3734
+ "maxrects-bl",
3735
+ "shelf-best",
3736
+ "maxrects-cp"
3737
+ ]
3738
+ },
3739
+ "train": {
3740
+ "1": {
3741
+ "inputs": 210,
3742
+ "hardRegret": 0,
3743
+ "excessAreaRegret": .002,
3744
+ "fillRegret": .015,
3745
+ "wins": 134,
3746
+ "winShare": .638,
3747
+ "msMean": 6.123
3748
+ },
3749
+ "2": {
3750
+ "inputs": 210,
3751
+ "hardRegret": 0,
3752
+ "excessAreaRegret": .002,
3753
+ "fillRegret": .004,
3754
+ "wins": 188,
3755
+ "winShare": .895,
3756
+ "msMean": 11.606
3757
+ },
3758
+ "3": {
3759
+ "inputs": 210,
3760
+ "hardRegret": 0,
3761
+ "excessAreaRegret": .001,
3762
+ "fillRegret": .002,
3763
+ "wins": 197,
3764
+ "winShare": .938,
3765
+ "msMean": 26.072
3766
+ }
3767
+ },
3768
+ "prefixMedianMs": {
3769
+ "1": 2.133,
3770
+ "2": 3.31,
3771
+ "3": 7.783
3772
+ },
3773
+ "defaultMembers": 3
3774
+ },
3775
+ "ellipse": {
3776
+ "inputs": 210,
3777
+ "thin": false,
3778
+ "sets": {
3779
+ "1": ["maxrects-bl"],
3780
+ "2": ["maxrects-bl", "maxrects-cp"],
3781
+ "3": [
3782
+ "maxrects-bl",
3783
+ "maxrects-cp",
3784
+ "skyline"
3785
+ ]
3786
+ },
3787
+ "train": {
3788
+ "1": {
3789
+ "inputs": 210,
3790
+ "hardRegret": 0,
3791
+ "excessAreaRegret": 0,
3792
+ "fillRegret": .024,
3793
+ "wins": 138,
3794
+ "winShare": .657,
3795
+ "msMean": 9.772
3796
+ },
3797
+ "2": {
3798
+ "inputs": 210,
3799
+ "hardRegret": 0,
3800
+ "excessAreaRegret": 0,
3801
+ "fillRegret": .008,
3802
+ "wins": 162,
3803
+ "winShare": .771,
3804
+ "msMean": 34.101
3805
+ },
3806
+ "3": {
3807
+ "inputs": 210,
3808
+ "hardRegret": 0,
3809
+ "excessAreaRegret": 0,
3810
+ "fillRegret": .005,
3811
+ "wins": 184,
3812
+ "winShare": .876,
3813
+ "msMean": 49.128
3814
+ }
3815
+ },
3816
+ "prefixMedianMs": {
3817
+ "1": 3.553,
3818
+ "2": 7.079,
3819
+ "3": 11.095
3820
+ },
3821
+ "defaultMembers": 3
3822
+ },
3823
+ "holes": {
3824
+ "inputs": 210,
3825
+ "thin": false,
3826
+ "sets": {
3827
+ "1": ["maxrects-bl"],
3828
+ "2": ["maxrects-bl", "shelf-first"],
3829
+ "3": [
3830
+ "maxrects-bl",
3831
+ "shelf-first",
3832
+ "maxrects-cp"
3833
+ ]
3834
+ },
3835
+ "train": {
3836
+ "1": {
3837
+ "inputs": 210,
3838
+ "hardRegret": 0,
3839
+ "excessAreaRegret": .001,
3840
+ "fillRegret": .016,
3841
+ "wins": 131,
3842
+ "winShare": .624,
3843
+ "msMean": 2.009
3844
+ },
3845
+ "2": {
3846
+ "inputs": 210,
3847
+ "hardRegret": 0,
3848
+ "excessAreaRegret": .001,
3849
+ "fillRegret": .011,
3850
+ "wins": 163,
3851
+ "winShare": .776,
3852
+ "msMean": 8.29
3853
+ },
3854
+ "3": {
3855
+ "inputs": 210,
3856
+ "hardRegret": 0,
3857
+ "excessAreaRegret": 0,
3858
+ "fillRegret": .005,
3859
+ "wins": 183,
3860
+ "winShare": .871,
3861
+ "msMean": 13.146
3862
+ }
3863
+ },
3864
+ "prefixMedianMs": {
3865
+ "1": .755,
3866
+ "2": 1.626,
3867
+ "3": 2.455
3868
+ },
3869
+ "defaultMembers": 3
3870
+ },
3871
+ "polygon": {
3872
+ "inputs": 210,
3873
+ "thin": false,
3874
+ "sets": {
3875
+ "1": ["maxrects-bl"],
3876
+ "2": ["maxrects-bl", "shelf-best"],
3877
+ "3": [
3878
+ "maxrects-bl",
3879
+ "shelf-best",
3880
+ "maxrects-blsf"
3881
+ ]
3882
+ },
3883
+ "train": {
3884
+ "1": {
3885
+ "inputs": 210,
3886
+ "hardRegret": 0,
3887
+ "excessAreaRegret": 0,
3888
+ "fillRegret": .03,
3889
+ "wins": 130,
3890
+ "winShare": .619,
3891
+ "msMean": 1.663
3892
+ },
3893
+ "2": {
3894
+ "inputs": 210,
3895
+ "hardRegret": 0,
3896
+ "excessAreaRegret": 0,
3897
+ "fillRegret": .012,
3898
+ "wins": 180,
3899
+ "winShare": .857,
3900
+ "msMean": 7.39
3901
+ },
3902
+ "3": {
3903
+ "inputs": 210,
3904
+ "hardRegret": 0,
3905
+ "excessAreaRegret": 0,
3906
+ "fillRegret": .004,
3907
+ "wins": 193,
3908
+ "winShare": .919,
3909
+ "msMean": 8.701
3910
+ }
3911
+ },
3912
+ "prefixMedianMs": {
3913
+ "1": .477,
3914
+ "2": 1.176,
3915
+ "3": 1.636
3916
+ },
3917
+ "defaultMembers": 3
3918
+ },
3919
+ "rect": {
3920
+ "inputs": 255,
3921
+ "thin": false,
3922
+ "sets": {
3923
+ "1": ["maxrects-bl"],
3924
+ "2": ["maxrects-bl", "shelf-best"],
3925
+ "3": [
3926
+ "maxrects-bl",
3927
+ "shelf-best",
3928
+ "maxrects-blsf"
3929
+ ]
3930
+ },
3931
+ "train": {
3932
+ "1": {
3933
+ "inputs": 255,
3934
+ "hardRegret": 0,
3935
+ "excessAreaRegret": 0,
3936
+ "fillRegret": .019,
3937
+ "wins": 165,
3938
+ "winShare": .647,
3939
+ "msMean": .808
3940
+ },
3941
+ "2": {
3942
+ "inputs": 255,
3943
+ "hardRegret": 0,
3944
+ "excessAreaRegret": 0,
3945
+ "fillRegret": .007,
3946
+ "wins": 212,
3947
+ "winShare": .831,
3948
+ "msMean": 2.807
3949
+ },
3950
+ "3": {
3951
+ "inputs": 255,
3952
+ "hardRegret": 0,
3953
+ "excessAreaRegret": 0,
3954
+ "fillRegret": .003,
3955
+ "wins": 225,
3956
+ "winShare": .882,
3957
+ "msMean": 3.514
3958
+ }
3959
+ },
3960
+ "prefixMedianMs": {
3961
+ "1": .094,
3962
+ "2": .426,
3963
+ "3": .582
3964
+ },
3965
+ "defaultMembers": 3
3966
+ }
3967
+ },
3968
+ "cells": {
3969
+ "circle/10/heavyTail": {
3970
+ "inputs": 35,
3971
+ "thin": false,
3972
+ "sets": {
3973
+ "1": ["maxrects-cp"],
3974
+ "2": ["maxrects-cp", "maxrects-bl"],
3975
+ "3": [
3976
+ "maxrects-cp",
3977
+ "maxrects-bl",
3978
+ "skyline"
3979
+ ]
3980
+ },
3981
+ "train": {
3982
+ "1": {
3983
+ "inputs": 35,
3984
+ "hardRegret": 0,
3985
+ "excessAreaRegret": .004,
3986
+ "fillRegret": .073,
3987
+ "wins": 10,
3988
+ "winShare": .286,
3989
+ "msMean": .886
3990
+ },
3991
+ "2": {
3992
+ "inputs": 35,
3993
+ "hardRegret": 0,
3994
+ "excessAreaRegret": 0,
3995
+ "fillRegret": .014,
3996
+ "wins": 20,
3997
+ "winShare": .571,
3998
+ "msMean": 1.82
3999
+ },
4000
+ "3": {
4001
+ "inputs": 35,
4002
+ "hardRegret": 0,
4003
+ "excessAreaRegret": 0,
4004
+ "fillRegret": .01,
4005
+ "wins": 28,
4006
+ "winShare": .8,
4007
+ "msMean": 2.277
4008
+ }
4009
+ },
4010
+ "prefixMedianMs": {
4011
+ "1": .938,
4012
+ "2": 1.86,
4013
+ "3": 2.105
4014
+ },
4015
+ "defaultMembers": 3
4016
+ },
4017
+ "circle/10/uniform": {
4018
+ "inputs": 35,
4019
+ "thin": false,
4020
+ "sets": {
4021
+ "1": ["maxrects-bl"],
4022
+ "2": ["maxrects-bl", "skyline"],
4023
+ "3": [
4024
+ "maxrects-bl",
4025
+ "skyline",
4026
+ "maxrects-cp"
4027
+ ]
4028
+ },
4029
+ "train": {
4030
+ "1": {
4031
+ "inputs": 35,
4032
+ "hardRegret": 0,
4033
+ "excessAreaRegret": 0,
4034
+ "fillRegret": .025,
4035
+ "wins": 14,
4036
+ "winShare": .4,
4037
+ "msMean": 1.028
4038
+ },
4039
+ "2": {
4040
+ "inputs": 35,
4041
+ "hardRegret": 0,
4042
+ "excessAreaRegret": 0,
4043
+ "fillRegret": .009,
4044
+ "wins": 28,
4045
+ "winShare": .8,
4046
+ "msMean": 1.317
4047
+ },
4048
+ "3": {
4049
+ "inputs": 35,
4050
+ "hardRegret": 0,
4051
+ "excessAreaRegret": 0,
4052
+ "fillRegret": .007,
4053
+ "wins": 32,
4054
+ "winShare": .914,
4055
+ "msMean": 2.411
4056
+ }
4057
+ },
4058
+ "prefixMedianMs": {
4059
+ "1": .971,
4060
+ "2": 1.237,
4061
+ "3": 2.388
4062
+ },
4063
+ "defaultMembers": 3
4064
+ },
4065
+ "circle/100/heavyTail": {
4066
+ "inputs": 35,
4067
+ "thin": false,
4068
+ "sets": {
4069
+ "1": ["maxrects-bl"],
4070
+ "2": ["maxrects-bl", "maxrects-bssf"],
4071
+ "3": [
4072
+ "maxrects-bl",
4073
+ "maxrects-bssf",
4074
+ "maxrects-cp"
4075
+ ]
4076
+ },
4077
+ "train": {
4078
+ "1": {
4079
+ "inputs": 35,
4080
+ "hardRegret": 0,
4081
+ "excessAreaRegret": .001,
4082
+ "fillRegret": .004,
4083
+ "wins": 26,
4084
+ "winShare": .743,
4085
+ "msMean": 3.076
4086
+ },
4087
+ "2": {
4088
+ "inputs": 35,
4089
+ "hardRegret": 0,
4090
+ "excessAreaRegret": 0,
4091
+ "fillRegret": .004,
4092
+ "wins": 30,
4093
+ "winShare": .857,
4094
+ "msMean": 5.932
4095
+ },
4096
+ "3": {
4097
+ "inputs": 35,
4098
+ "hardRegret": 0,
4099
+ "excessAreaRegret": 0,
4100
+ "fillRegret": .001,
4101
+ "wins": 33,
4102
+ "winShare": .943,
4103
+ "msMean": 8.775
4104
+ }
4105
+ },
4106
+ "prefixMedianMs": {
4107
+ "1": 2.837,
4108
+ "2": 5.774,
4109
+ "3": 8.149
4110
+ },
4111
+ "defaultMembers": 3
4112
+ },
4113
+ "circle/100/uniform": {
4114
+ "inputs": 35,
4115
+ "thin": false,
4116
+ "sets": {
4117
+ "1": ["maxrects-bl"],
4118
+ "2": ["maxrects-bl", "maxrects-cp"],
4119
+ "3": ["maxrects-bl", "maxrects-cp"]
4120
+ },
4121
+ "train": {
4122
+ "1": {
4123
+ "inputs": 35,
4124
+ "hardRegret": 0,
4125
+ "excessAreaRegret": 0,
4126
+ "fillRegret": .005,
4127
+ "wins": 30,
4128
+ "winShare": .857,
4129
+ "msMean": 4.611
4130
+ },
4131
+ "2": {
4132
+ "inputs": 35,
4133
+ "hardRegret": 0,
4134
+ "excessAreaRegret": 0,
4135
+ "fillRegret": 0,
4136
+ "wins": 35,
4137
+ "winShare": 1,
4138
+ "msMean": 14.686
4139
+ },
4140
+ "3": {
4141
+ "inputs": 35,
4142
+ "hardRegret": 0,
4143
+ "excessAreaRegret": 0,
4144
+ "fillRegret": 0,
4145
+ "wins": 35,
4146
+ "winShare": 1,
4147
+ "msMean": 14.686
4148
+ }
4149
+ },
4150
+ "prefixMedianMs": {
4151
+ "1": 4.648,
4152
+ "2": 14.826,
4153
+ "3": 14.826
4154
+ },
4155
+ "defaultMembers": 2
4156
+ },
4157
+ "circle/1k/heavyTail": {
4158
+ "inputs": 35,
4159
+ "thin": false,
4160
+ "sets": {
4161
+ "1": ["maxrects-bssf"],
4162
+ "2": ["maxrects-bssf", "maxrects-blsf"],
4163
+ "3": [
4164
+ "maxrects-bssf",
4165
+ "maxrects-blsf",
4166
+ "maxrects-bl"
4167
+ ]
4168
+ },
4169
+ "train": {
4170
+ "1": {
4171
+ "inputs": 35,
4172
+ "hardRegret": 0,
4173
+ "excessAreaRegret": 0,
4174
+ "fillRegret": .002,
4175
+ "wins": 33,
4176
+ "winShare": .943,
4177
+ "msMean": 6.063
4178
+ },
4179
+ "2": {
4180
+ "inputs": 35,
4181
+ "hardRegret": 0,
4182
+ "excessAreaRegret": 0,
4183
+ "fillRegret": .002,
4184
+ "wins": 34,
4185
+ "winShare": .971,
4186
+ "msMean": 11.397
4187
+ },
4188
+ "3": {
4189
+ "inputs": 35,
4190
+ "hardRegret": 0,
4191
+ "excessAreaRegret": 0,
4192
+ "fillRegret": 0,
4193
+ "wins": 35,
4194
+ "winShare": 1,
4195
+ "msMean": 17.653
4196
+ }
4197
+ },
4198
+ "prefixMedianMs": {
4199
+ "1": 5.498,
4200
+ "2": 9.771,
4201
+ "3": 14.704
4202
+ },
4203
+ "defaultMembers": 3
4204
+ },
4205
+ "circle/1k/uniform": {
4206
+ "inputs": 35,
4207
+ "thin": false,
4208
+ "sets": {
4209
+ "1": ["maxrects-bl"],
4210
+ "2": ["maxrects-bl", "shelf-best"],
4211
+ "3": ["maxrects-bl", "shelf-best"]
4212
+ },
4213
+ "train": {
4214
+ "1": {
4215
+ "inputs": 35,
4216
+ "hardRegret": 0,
4217
+ "excessAreaRegret": 0,
4218
+ "fillRegret": .001,
4219
+ "wins": 31,
4220
+ "winShare": .886,
4221
+ "msMean": 44.25
4222
+ },
4223
+ "2": {
4224
+ "inputs": 35,
4225
+ "hardRegret": 0,
4226
+ "excessAreaRegret": 0,
4227
+ "fillRegret": 0,
4228
+ "wins": 35,
4229
+ "winShare": 1,
4230
+ "msMean": 56.133
4231
+ },
4232
+ "3": {
4233
+ "inputs": 35,
4234
+ "hardRegret": 0,
4235
+ "excessAreaRegret": 0,
4236
+ "fillRegret": 0,
4237
+ "wins": 35,
4238
+ "winShare": 1,
4239
+ "msMean": 56.133
4240
+ }
4241
+ },
4242
+ "prefixMedianMs": {
4243
+ "1": 46.745,
4244
+ "2": 58.961,
4245
+ "3": 58.961
4246
+ },
4247
+ "defaultMembers": 1
4248
+ },
4249
+ "convex/10/heavyTail": {
4250
+ "inputs": 35,
4251
+ "thin": false,
4252
+ "sets": {
4253
+ "1": ["maxrects-cp"],
4254
+ "2": ["maxrects-cp", "maxrects-baf"],
4255
+ "3": [
4256
+ "maxrects-cp",
4257
+ "maxrects-baf",
4258
+ "maxrects-bl"
4259
+ ]
4260
+ },
4261
+ "train": {
4262
+ "1": {
4263
+ "inputs": 35,
4264
+ "hardRegret": 0,
4265
+ "excessAreaRegret": .007,
4266
+ "fillRegret": .208,
4267
+ "wins": 5,
4268
+ "winShare": .143,
4269
+ "msMean": .577
4270
+ },
4271
+ "2": {
4272
+ "inputs": 35,
4273
+ "hardRegret": 0,
4274
+ "excessAreaRegret": .001,
4275
+ "fillRegret": .143,
4276
+ "wins": 7,
4277
+ "winShare": .2,
4278
+ "msMean": 1.46
4279
+ },
4280
+ "3": {
4281
+ "inputs": 35,
4282
+ "hardRegret": 0,
4283
+ "excessAreaRegret": 0,
4284
+ "fillRegret": .016,
4285
+ "wins": 26,
4286
+ "winShare": .743,
4287
+ "msMean": 2.184
4288
+ }
4289
+ },
4290
+ "prefixMedianMs": {
4291
+ "1": .513,
4292
+ "2": 1.303,
4293
+ "3": 1.931
4294
+ },
4295
+ "defaultMembers": 3
4296
+ },
4297
+ "convex/10/uniform": {
4298
+ "inputs": 35,
4299
+ "thin": false,
4300
+ "sets": {
4301
+ "1": ["maxrects-bl"],
4302
+ "2": ["maxrects-bl", "maxrects-cp"],
4303
+ "3": [
4304
+ "maxrects-bl",
4305
+ "maxrects-cp",
4306
+ "maxrects-bssf"
4307
+ ]
4308
+ },
4309
+ "train": {
4310
+ "1": {
4311
+ "inputs": 35,
4312
+ "hardRegret": 0,
4313
+ "excessAreaRegret": 0,
4314
+ "fillRegret": .012,
4315
+ "wins": 26,
4316
+ "winShare": .743,
4317
+ "msMean": .786
4318
+ },
4319
+ "2": {
4320
+ "inputs": 35,
4321
+ "hardRegret": 0,
4322
+ "excessAreaRegret": 0,
4323
+ "fillRegret": .005,
4324
+ "wins": 30,
4325
+ "winShare": .857,
4326
+ "msMean": 1.482
4327
+ },
4328
+ "3": {
4329
+ "inputs": 35,
4330
+ "hardRegret": 0,
4331
+ "excessAreaRegret": 0,
4332
+ "fillRegret": .002,
4333
+ "wins": 32,
4334
+ "winShare": .914,
4335
+ "msMean": 2.348
4336
+ }
4337
+ },
4338
+ "prefixMedianMs": {
4339
+ "1": .71,
4340
+ "2": 1.316,
4341
+ "3": 2.22
4342
+ },
4343
+ "defaultMembers": 3
4344
+ },
4345
+ "convex/100/heavyTail": {
4346
+ "inputs": 35,
4347
+ "thin": false,
4348
+ "sets": {
4349
+ "1": ["maxrects-bl"],
4350
+ "2": ["maxrects-bl", "maxrects-cp"],
4351
+ "3": [
4352
+ "maxrects-bl",
4353
+ "maxrects-cp",
4354
+ "maxrects-bssf"
4355
+ ]
4356
+ },
4357
+ "train": {
4358
+ "1": {
4359
+ "inputs": 35,
4360
+ "hardRegret": 0,
4361
+ "excessAreaRegret": 0,
4362
+ "fillRegret": .001,
4363
+ "wins": 32,
4364
+ "winShare": .914,
4365
+ "msMean": 2.416
4366
+ },
4367
+ "2": {
4368
+ "inputs": 35,
4369
+ "hardRegret": 0,
4370
+ "excessAreaRegret": 0,
4371
+ "fillRegret": 0,
4372
+ "wins": 34,
4373
+ "winShare": .971,
4374
+ "msMean": 5.037
4375
+ },
4376
+ "3": {
4377
+ "inputs": 35,
4378
+ "hardRegret": 0,
4379
+ "excessAreaRegret": 0,
4380
+ "fillRegret": 0,
4381
+ "wins": 35,
4382
+ "winShare": 1,
4383
+ "msMean": 7.013
4384
+ }
4385
+ },
4386
+ "prefixMedianMs": {
4387
+ "1": 2.083,
4388
+ "2": 4.342,
4389
+ "3": 5.664
4390
+ },
4391
+ "defaultMembers": 3
4392
+ },
4393
+ "convex/100/uniform": {
4394
+ "inputs": 35,
4395
+ "thin": false,
4396
+ "sets": {
4397
+ "1": ["maxrects-bl"],
4398
+ "2": ["maxrects-bl", "shelf"],
4399
+ "3": [
4400
+ "maxrects-bl",
4401
+ "shelf",
4402
+ "shelf-first"
4403
+ ]
4404
+ },
4405
+ "train": {
4406
+ "1": {
4407
+ "inputs": 35,
4408
+ "hardRegret": 0,
4409
+ "excessAreaRegret": 0,
4410
+ "fillRegret": .007,
4411
+ "wins": 21,
4412
+ "winShare": .6,
4413
+ "msMean": 3.347
4414
+ },
4415
+ "2": {
4416
+ "inputs": 35,
4417
+ "hardRegret": 0,
4418
+ "excessAreaRegret": 0,
4419
+ "fillRegret": .001,
4420
+ "wins": 33,
4421
+ "winShare": .943,
4422
+ "msMean": 3.533
4423
+ },
4424
+ "3": {
4425
+ "inputs": 35,
4426
+ "hardRegret": 0,
4427
+ "excessAreaRegret": 0,
4428
+ "fillRegret": .001,
4429
+ "wins": 34,
4430
+ "winShare": .971,
4431
+ "msMean": 4.004
4432
+ }
4433
+ },
4434
+ "prefixMedianMs": {
4435
+ "1": 3.337,
4436
+ "2": 3.513,
4437
+ "3": 3.956
4438
+ },
4439
+ "defaultMembers": 3
4440
+ },
4441
+ "convex/1k/heavyTail": {
4442
+ "inputs": 35,
4443
+ "thin": false,
4444
+ "sets": {
4445
+ "1": ["maxrects-cp"],
4446
+ "2": ["maxrects-cp"],
4447
+ "3": ["maxrects-cp"]
4448
+ },
4449
+ "train": {
4450
+ "1": {
4451
+ "inputs": 35,
4452
+ "hardRegret": 0,
4453
+ "excessAreaRegret": -.001,
4454
+ "fillRegret": -.001,
4455
+ "wins": 35,
4456
+ "winShare": 1,
4457
+ "msMean": 3.71
4458
+ },
4459
+ "2": {
4460
+ "inputs": 35,
4461
+ "hardRegret": 0,
4462
+ "excessAreaRegret": -.001,
4463
+ "fillRegret": -.001,
4464
+ "wins": 35,
4465
+ "winShare": 1,
4466
+ "msMean": 3.71
4467
+ },
4468
+ "3": {
4469
+ "inputs": 35,
4470
+ "hardRegret": 0,
4471
+ "excessAreaRegret": -.001,
4472
+ "fillRegret": -.001,
4473
+ "wins": 35,
4474
+ "winShare": 1,
4475
+ "msMean": 3.71
4476
+ }
4477
+ },
4478
+ "prefixMedianMs": {
4479
+ "1": 2.383,
4480
+ "2": 2.383,
4481
+ "3": 2.383
4482
+ },
4483
+ "defaultMembers": 1
4484
+ },
4485
+ "convex/1k/uniform": {
4486
+ "inputs": 35,
4487
+ "thin": false,
4488
+ "sets": {
4489
+ "1": ["shelf-best"],
4490
+ "2": ["shelf-best"],
4491
+ "3": ["shelf-best"]
4492
+ },
4493
+ "train": {
4494
+ "1": {
4495
+ "inputs": 35,
4496
+ "hardRegret": 0,
4497
+ "excessAreaRegret": 0,
4498
+ "fillRegret": .001,
4499
+ "wins": 35,
4500
+ "winShare": 1,
4501
+ "msMean": 19.138
4502
+ },
4503
+ "2": {
4504
+ "inputs": 35,
4505
+ "hardRegret": 0,
4506
+ "excessAreaRegret": 0,
4507
+ "fillRegret": .001,
4508
+ "wins": 35,
4509
+ "winShare": 1,
4510
+ "msMean": 19.138
4511
+ },
4512
+ "3": {
4513
+ "inputs": 35,
4514
+ "hardRegret": 0,
4515
+ "excessAreaRegret": 0,
4516
+ "fillRegret": .001,
4517
+ "wins": 35,
4518
+ "winShare": 1,
4519
+ "msMean": 19.138
4520
+ }
4521
+ },
4522
+ "prefixMedianMs": {
4523
+ "1": 18.965,
4524
+ "2": 18.965,
4525
+ "3": 18.965
4526
+ },
4527
+ "defaultMembers": 1
4528
+ },
4529
+ "ellipse/10/heavyTail": {
4530
+ "inputs": 35,
4531
+ "thin": false,
4532
+ "sets": {
4533
+ "1": ["maxrects-cp"],
4534
+ "2": ["maxrects-cp", "skyline"],
4535
+ "3": [
4536
+ "maxrects-cp",
4537
+ "skyline",
4538
+ "shelf"
4539
+ ]
4540
+ },
4541
+ "train": {
4542
+ "1": {
4543
+ "inputs": 35,
4544
+ "hardRegret": 0,
4545
+ "excessAreaRegret": .005,
4546
+ "fillRegret": .061,
4547
+ "wins": 12,
4548
+ "winShare": .343,
4549
+ "msMean": .896
4550
+ },
4551
+ "2": {
4552
+ "inputs": 35,
4553
+ "hardRegret": 0,
4554
+ "excessAreaRegret": .001,
4555
+ "fillRegret": .026,
4556
+ "wins": 19,
4557
+ "winShare": .543,
4558
+ "msMean": 1.675
4559
+ },
4560
+ "3": {
4561
+ "inputs": 35,
4562
+ "hardRegret": 0,
4563
+ "excessAreaRegret": .001,
4564
+ "fillRegret": .016,
4565
+ "wins": 23,
4566
+ "winShare": .657,
4567
+ "msMean": 1.684
4568
+ }
4569
+ },
4570
+ "prefixMedianMs": {
4571
+ "1": .815,
4572
+ "2": 1.348,
4573
+ "3": 1.356
4574
+ },
4575
+ "defaultMembers": 3
4576
+ },
4577
+ "ellipse/10/uniform": {
4578
+ "inputs": 35,
4579
+ "thin": false,
4580
+ "sets": {
4581
+ "1": ["skyline"],
4582
+ "2": ["skyline", "maxrects-cp"],
4583
+ "3": [
4584
+ "skyline",
4585
+ "maxrects-cp",
4586
+ "maxrects-bl"
4587
+ ]
4588
+ },
4589
+ "train": {
4590
+ "1": {
4591
+ "inputs": 35,
4592
+ "hardRegret": 0,
4593
+ "excessAreaRegret": .003,
4594
+ "fillRegret": .059,
4595
+ "wins": 16,
4596
+ "winShare": .457,
4597
+ "msMean": .362
4598
+ },
4599
+ "2": {
4600
+ "inputs": 35,
4601
+ "hardRegret": 0,
4602
+ "excessAreaRegret": 0,
4603
+ "fillRegret": .021,
4604
+ "wins": 25,
4605
+ "winShare": .714,
4606
+ "msMean": 1.407
4607
+ },
4608
+ "3": {
4609
+ "inputs": 35,
4610
+ "hardRegret": 0,
4611
+ "excessAreaRegret": 0,
4612
+ "fillRegret": .005,
4613
+ "wins": 33,
4614
+ "winShare": .943,
4615
+ "msMean": 2.39
4616
+ }
4617
+ },
4618
+ "prefixMedianMs": {
4619
+ "1": .272,
4620
+ "2": 1.286,
4621
+ "3": 2.153
4622
+ },
4623
+ "defaultMembers": 3
4624
+ },
4625
+ "ellipse/100/heavyTail": {
4626
+ "inputs": 35,
4627
+ "thin": false,
4628
+ "sets": {
4629
+ "1": ["maxrects-bl"],
4630
+ "2": ["maxrects-bl", "maxrects-bssf"],
4631
+ "3": [
4632
+ "maxrects-bl",
4633
+ "maxrects-bssf",
4634
+ "maxrects-baf"
4635
+ ]
4636
+ },
4637
+ "train": {
4638
+ "1": {
4639
+ "inputs": 35,
4640
+ "hardRegret": 0,
4641
+ "excessAreaRegret": .001,
4642
+ "fillRegret": .003,
4643
+ "wins": 27,
4644
+ "winShare": .771,
4645
+ "msMean": 3.074
4646
+ },
4647
+ "2": {
4648
+ "inputs": 35,
4649
+ "hardRegret": 0,
4650
+ "excessAreaRegret": 0,
4651
+ "fillRegret": .003,
4652
+ "wins": 32,
4653
+ "winShare": .914,
4654
+ "msMean": 5.854
4655
+ },
4656
+ "3": {
4657
+ "inputs": 35,
4658
+ "hardRegret": 0,
4659
+ "excessAreaRegret": 0,
4660
+ "fillRegret": .002,
4661
+ "wins": 33,
4662
+ "winShare": .943,
4663
+ "msMean": 8.393
4664
+ }
4665
+ },
4666
+ "prefixMedianMs": {
4667
+ "1": 2.802,
4668
+ "2": 5.274,
4669
+ "3": 7.336
4670
+ },
4671
+ "defaultMembers": 3
4672
+ },
4673
+ "ellipse/100/uniform": {
4674
+ "inputs": 35,
4675
+ "thin": false,
4676
+ "sets": {
4677
+ "1": ["maxrects-bl"],
4678
+ "2": ["maxrects-bl", "skyline"],
4679
+ "3": [
4680
+ "maxrects-bl",
4681
+ "skyline",
4682
+ "maxrects-cp"
4683
+ ]
4684
+ },
4685
+ "train": {
4686
+ "1": {
4687
+ "inputs": 35,
4688
+ "hardRegret": 0,
4689
+ "excessAreaRegret": 0,
4690
+ "fillRegret": .002,
4691
+ "wins": 30,
4692
+ "winShare": .857,
4693
+ "msMean": 5.351
4694
+ },
4695
+ "2": {
4696
+ "inputs": 35,
4697
+ "hardRegret": 0,
4698
+ "excessAreaRegret": 0,
4699
+ "fillRegret": .001,
4700
+ "wins": 34,
4701
+ "winShare": .971,
4702
+ "msMean": 7.226
4703
+ },
4704
+ "3": {
4705
+ "inputs": 35,
4706
+ "hardRegret": 0,
4707
+ "excessAreaRegret": 0,
4708
+ "fillRegret": 0,
4709
+ "wins": 35,
4710
+ "winShare": 1,
4711
+ "msMean": 17.469
4712
+ }
4713
+ },
4714
+ "prefixMedianMs": {
4715
+ "1": 5.179,
4716
+ "2": 7.083,
4717
+ "3": 17.026
4718
+ },
4719
+ "defaultMembers": 3
4720
+ },
4721
+ "ellipse/1k/heavyTail": {
4722
+ "inputs": 35,
4723
+ "thin": false,
4724
+ "sets": {
4725
+ "1": ["maxrects-bssf"],
4726
+ "2": ["maxrects-bssf", "maxrects-baf"],
4727
+ "3": [
4728
+ "maxrects-bssf",
4729
+ "maxrects-baf",
4730
+ "maxrects-cp"
4731
+ ]
4732
+ },
4733
+ "train": {
4734
+ "1": {
4735
+ "inputs": 35,
4736
+ "hardRegret": 0,
4737
+ "excessAreaRegret": 0,
4738
+ "fillRegret": .003,
4739
+ "wins": 30,
4740
+ "winShare": .857,
4741
+ "msMean": 5.533
4742
+ },
4743
+ "2": {
4744
+ "inputs": 35,
4745
+ "hardRegret": 0,
4746
+ "excessAreaRegret": 0,
4747
+ "fillRegret": .002,
4748
+ "wins": 32,
4749
+ "winShare": .914,
4750
+ "msMean": 11.173
4751
+ },
4752
+ "3": {
4753
+ "inputs": 35,
4754
+ "hardRegret": 0,
4755
+ "excessAreaRegret": 0,
4756
+ "fillRegret": .002,
4757
+ "wins": 33,
4758
+ "winShare": .943,
4759
+ "msMean": 16.218
4760
+ }
4761
+ },
4762
+ "prefixMedianMs": {
4763
+ "1": 5.067,
4764
+ "2": 9.708,
4765
+ "3": 13.112
4766
+ },
4767
+ "defaultMembers": 3
4768
+ },
4769
+ "ellipse/1k/uniform": {
4770
+ "inputs": 35,
4771
+ "thin": false,
4772
+ "sets": {
4773
+ "1": ["maxrects-bl"],
4774
+ "2": ["maxrects-bl"],
4775
+ "3": ["maxrects-bl"]
4776
+ },
4777
+ "train": {
4778
+ "1": {
4779
+ "inputs": 35,
4780
+ "hardRegret": 0,
4781
+ "excessAreaRegret": 0,
4782
+ "fillRegret": 0,
4783
+ "wins": 35,
4784
+ "winShare": 1,
4785
+ "msMean": 42.562
4786
+ },
4787
+ "2": {
4788
+ "inputs": 35,
4789
+ "hardRegret": 0,
4790
+ "excessAreaRegret": 0,
4791
+ "fillRegret": 0,
4792
+ "wins": 35,
4793
+ "winShare": 1,
4794
+ "msMean": 42.562
4795
+ },
4796
+ "3": {
4797
+ "inputs": 35,
4798
+ "hardRegret": 0,
4799
+ "excessAreaRegret": 0,
4800
+ "fillRegret": 0,
4801
+ "wins": 35,
4802
+ "winShare": 1,
4803
+ "msMean": 42.562
4804
+ }
4805
+ },
4806
+ "prefixMedianMs": {
4807
+ "1": 43.159,
4808
+ "2": 43.159,
4809
+ "3": 43.159
4810
+ },
4811
+ "defaultMembers": 1
4812
+ },
4813
+ "holes/10/heavyTail": {
4814
+ "inputs": 35,
4815
+ "thin": false,
4816
+ "sets": {
4817
+ "1": ["maxrects-bl"],
4818
+ "2": ["maxrects-bl", "maxrects-cp"],
4819
+ "3": [
4820
+ "maxrects-bl",
4821
+ "maxrects-cp",
4822
+ "maxrects-blsf"
4823
+ ]
4824
+ },
4825
+ "train": {
4826
+ "1": {
4827
+ "inputs": 35,
4828
+ "hardRegret": 0,
4829
+ "excessAreaRegret": .001,
4830
+ "fillRegret": .05,
4831
+ "wins": 19,
4832
+ "winShare": .543,
4833
+ "msMean": .392
4834
+ },
4835
+ "2": {
4836
+ "inputs": 35,
4837
+ "hardRegret": 0,
4838
+ "excessAreaRegret": 0,
4839
+ "fillRegret": .019,
4840
+ "wins": 26,
4841
+ "winShare": .743,
4842
+ "msMean": .671
4843
+ },
4844
+ "3": {
4845
+ "inputs": 35,
4846
+ "hardRegret": 0,
4847
+ "excessAreaRegret": 0,
4848
+ "fillRegret": .01,
4849
+ "wins": 30,
4850
+ "winShare": .857,
4851
+ "msMean": 1.068
4852
+ }
4853
+ },
4854
+ "prefixMedianMs": {
4855
+ "1": .377,
4856
+ "2": .652,
4857
+ "3": 1.036
4858
+ },
4859
+ "defaultMembers": 3
4860
+ },
4861
+ "holes/10/uniform": {
4862
+ "inputs": 35,
4863
+ "thin": false,
4864
+ "sets": {
4865
+ "1": ["maxrects-bl"],
4866
+ "2": ["maxrects-bl", "maxrects-baf"],
4867
+ "3": [
4868
+ "maxrects-bl",
4869
+ "maxrects-baf",
4870
+ "shelf-best"
4871
+ ]
4872
+ },
4873
+ "train": {
4874
+ "1": {
4875
+ "inputs": 35,
4876
+ "hardRegret": 0,
4877
+ "excessAreaRegret": 0,
4878
+ "fillRegret": .014,
4879
+ "wins": 23,
4880
+ "winShare": .657,
4881
+ "msMean": .4
4882
+ },
4883
+ "2": {
4884
+ "inputs": 35,
4885
+ "hardRegret": 0,
4886
+ "excessAreaRegret": 0,
4887
+ "fillRegret": .007,
4888
+ "wins": 27,
4889
+ "winShare": .771,
4890
+ "msMean": .951
4891
+ },
4892
+ "3": {
4893
+ "inputs": 35,
4894
+ "hardRegret": 0,
4895
+ "excessAreaRegret": 0,
4896
+ "fillRegret": .006,
4897
+ "wins": 30,
4898
+ "winShare": .857,
4899
+ "msMean": 1.115
4900
+ }
4901
+ },
4902
+ "prefixMedianMs": {
4903
+ "1": .391,
4904
+ "2": .912,
4905
+ "3": 1.024
4906
+ },
4907
+ "defaultMembers": 3
4908
+ },
4909
+ "holes/100/heavyTail": {
4910
+ "inputs": 35,
4911
+ "thin": false,
4912
+ "sets": {
4913
+ "1": ["maxrects-bl"],
4914
+ "2": ["maxrects-bl", "maxrects-cp"],
4915
+ "3": [
4916
+ "maxrects-bl",
4917
+ "maxrects-cp",
4918
+ "maxrects-bssf"
4919
+ ]
4920
+ },
4921
+ "train": {
4922
+ "1": {
4923
+ "inputs": 35,
4924
+ "hardRegret": 0,
4925
+ "excessAreaRegret": .003,
4926
+ "fillRegret": .005,
4927
+ "wins": 20,
4928
+ "winShare": .571,
4929
+ "msMean": .636
4930
+ },
4931
+ "2": {
4932
+ "inputs": 35,
4933
+ "hardRegret": 0,
4934
+ "excessAreaRegret": .001,
4935
+ "fillRegret": .002,
4936
+ "wins": 30,
4937
+ "winShare": .857,
4938
+ "msMean": 1.13
4939
+ },
4940
+ "3": {
4941
+ "inputs": 35,
4942
+ "hardRegret": 0,
4943
+ "excessAreaRegret": 0,
4944
+ "fillRegret": 0,
4945
+ "wins": 35,
4946
+ "winShare": 1,
4947
+ "msMean": 1.869
4948
+ }
4949
+ },
4950
+ "prefixMedianMs": {
4951
+ "1": .599,
4952
+ "2": 1.068,
4953
+ "3": 1.804
4954
+ },
4955
+ "defaultMembers": 3
4956
+ },
4957
+ "holes/100/uniform": {
4958
+ "inputs": 35,
4959
+ "thin": false,
4960
+ "sets": {
4961
+ "1": ["maxrects-bl"],
4962
+ "2": ["maxrects-bl", "shelf-first"],
4963
+ "3": [
4964
+ "maxrects-bl",
4965
+ "shelf-first",
4966
+ "maxrects-bssf"
4967
+ ]
4968
+ },
4969
+ "train": {
4970
+ "1": {
4971
+ "inputs": 35,
4972
+ "hardRegret": 0,
4973
+ "excessAreaRegret": 0,
4974
+ "fillRegret": .004,
4975
+ "wins": 32,
4976
+ "winShare": .914,
4977
+ "msMean": .882
4978
+ },
4979
+ "2": {
4980
+ "inputs": 35,
4981
+ "hardRegret": 0,
4982
+ "excessAreaRegret": 0,
4983
+ "fillRegret": .002,
4984
+ "wins": 34,
4985
+ "winShare": .971,
4986
+ "msMean": 1.948
4987
+ },
4988
+ "3": {
4989
+ "inputs": 35,
4990
+ "hardRegret": 0,
4991
+ "excessAreaRegret": 0,
4992
+ "fillRegret": 0,
4993
+ "wins": 35,
4994
+ "winShare": 1,
4995
+ "msMean": 3.03
4996
+ }
4997
+ },
4998
+ "prefixMedianMs": {
4999
+ "1": .837,
5000
+ "2": 1.942,
5001
+ "3": 3.011
5002
+ },
5003
+ "defaultMembers": 3
5004
+ },
5005
+ "holes/1k/heavyTail": {
5006
+ "inputs": 35,
5007
+ "thin": false,
5008
+ "sets": {
5009
+ "1": ["maxrects-cp"],
5010
+ "2": ["maxrects-cp"],
5011
+ "3": ["maxrects-cp"]
5012
+ },
5013
+ "train": {
5014
+ "1": {
5015
+ "inputs": 35,
5016
+ "hardRegret": 0,
5017
+ "excessAreaRegret": 0,
5018
+ "fillRegret": 0,
5019
+ "wins": 35,
5020
+ "winShare": 1,
5021
+ "msMean": 1.206
5022
+ },
5023
+ "2": {
5024
+ "inputs": 35,
5025
+ "hardRegret": 0,
5026
+ "excessAreaRegret": 0,
5027
+ "fillRegret": 0,
5028
+ "wins": 35,
5029
+ "winShare": 1,
5030
+ "msMean": 1.206
5031
+ },
5032
+ "3": {
5033
+ "inputs": 35,
5034
+ "hardRegret": 0,
5035
+ "excessAreaRegret": 0,
5036
+ "fillRegret": 0,
5037
+ "wins": 35,
5038
+ "winShare": 1,
5039
+ "msMean": 1.206
5040
+ }
5041
+ },
5042
+ "prefixMedianMs": {
5043
+ "1": 1.011,
5044
+ "2": 1.011,
5045
+ "3": 1.011
5046
+ },
5047
+ "defaultMembers": 1
5048
+ },
5049
+ "holes/1k/uniform": {
5050
+ "inputs": 35,
5051
+ "thin": false,
5052
+ "sets": {
5053
+ "1": ["shelf-first"],
5054
+ "2": ["shelf-first", "maxrects-bl"],
5055
+ "3": ["shelf-first", "maxrects-bl"]
5056
+ },
5057
+ "train": {
5058
+ "1": {
5059
+ "inputs": 35,
5060
+ "hardRegret": 0,
5061
+ "excessAreaRegret": 0,
5062
+ "fillRegret": .003,
5063
+ "wins": 30,
5064
+ "winShare": .857,
5065
+ "msMean": 28.492
5066
+ },
5067
+ "2": {
5068
+ "inputs": 35,
5069
+ "hardRegret": 0,
5070
+ "excessAreaRegret": 0,
5071
+ "fillRegret": -.002,
5072
+ "wins": 35,
5073
+ "winShare": 1,
5074
+ "msMean": 36.636
5075
+ },
5076
+ "3": {
5077
+ "inputs": 35,
5078
+ "hardRegret": 0,
5079
+ "excessAreaRegret": 0,
5080
+ "fillRegret": -.002,
5081
+ "wins": 35,
5082
+ "winShare": 1,
5083
+ "msMean": 36.636
5084
+ }
5085
+ },
5086
+ "prefixMedianMs": {
5087
+ "1": 29.151,
5088
+ "2": 37.4,
5089
+ "3": 37.4
5090
+ },
5091
+ "defaultMembers": 2
5092
+ },
5093
+ "polygon/10/heavyTail": {
5094
+ "inputs": 35,
5095
+ "thin": false,
5096
+ "sets": {
5097
+ "1": ["maxrects-bl"],
5098
+ "2": ["maxrects-bl", "maxrects-blsf"],
5099
+ "3": [
5100
+ "maxrects-bl",
5101
+ "maxrects-blsf",
5102
+ "shelf-best"
5103
+ ]
5104
+ },
5105
+ "train": {
5106
+ "1": {
5107
+ "inputs": 35,
5108
+ "hardRegret": 0,
5109
+ "excessAreaRegret": .001,
5110
+ "fillRegret": .08,
5111
+ "wins": 18,
5112
+ "winShare": .514,
5113
+ "msMean": .209
5114
+ },
5115
+ "2": {
5116
+ "inputs": 35,
5117
+ "hardRegret": 0,
5118
+ "excessAreaRegret": 0,
5119
+ "fillRegret": .034,
5120
+ "wins": 22,
5121
+ "winShare": .629,
5122
+ "msMean": .393
5123
+ },
5124
+ "3": {
5125
+ "inputs": 35,
5126
+ "hardRegret": 0,
5127
+ "excessAreaRegret": 0,
5128
+ "fillRegret": .013,
5129
+ "wins": 29,
5130
+ "winShare": .829,
5131
+ "msMean": .445
5132
+ }
5133
+ },
5134
+ "prefixMedianMs": {
5135
+ "1": .178,
5136
+ "2": .351,
5137
+ "3": .401
5138
+ },
5139
+ "defaultMembers": 3
5140
+ },
5141
+ "polygon/10/uniform": {
5142
+ "inputs": 35,
5143
+ "thin": false,
5144
+ "sets": {
5145
+ "1": ["maxrects-bl"],
5146
+ "2": ["maxrects-bl", "shelf-best"],
5147
+ "3": [
5148
+ "maxrects-bl",
5149
+ "shelf-best",
5150
+ "maxrects-blsf"
5151
+ ]
5152
+ },
5153
+ "train": {
5154
+ "1": {
5155
+ "inputs": 35,
5156
+ "hardRegret": 0,
5157
+ "excessAreaRegret": 0,
5158
+ "fillRegret": .04,
5159
+ "wins": 21,
5160
+ "winShare": .6,
5161
+ "msMean": .233
5162
+ },
5163
+ "2": {
5164
+ "inputs": 35,
5165
+ "hardRegret": 0,
5166
+ "excessAreaRegret": 0,
5167
+ "fillRegret": .009,
5168
+ "wins": 28,
5169
+ "winShare": .8,
5170
+ "msMean": .278
5171
+ },
5172
+ "3": {
5173
+ "inputs": 35,
5174
+ "hardRegret": 0,
5175
+ "excessAreaRegret": 0,
5176
+ "fillRegret": .008,
5177
+ "wins": 30,
5178
+ "winShare": .857,
5179
+ "msMean": .482
5180
+ }
5181
+ },
5182
+ "prefixMedianMs": {
5183
+ "1": .175,
5184
+ "2": .222,
5185
+ "3": .408
5186
+ },
5187
+ "defaultMembers": 3
5188
+ },
5189
+ "polygon/100/heavyTail": {
5190
+ "inputs": 35,
5191
+ "thin": false,
5192
+ "sets": {
5193
+ "1": ["maxrects-bl"],
5194
+ "2": ["maxrects-bl", "maxrects-cp"],
5195
+ "3": [
5196
+ "maxrects-bl",
5197
+ "maxrects-cp",
5198
+ "maxrects-bssf"
5199
+ ]
5200
+ },
5201
+ "train": {
5202
+ "1": {
5203
+ "inputs": 35,
5204
+ "hardRegret": 0,
5205
+ "excessAreaRegret": .001,
5206
+ "fillRegret": .002,
5207
+ "wins": 28,
5208
+ "winShare": .8,
5209
+ "msMean": .369
5210
+ },
5211
+ "2": {
5212
+ "inputs": 35,
5213
+ "hardRegret": 0,
5214
+ "excessAreaRegret": 0,
5215
+ "fillRegret": .001,
5216
+ "wins": 32,
5217
+ "winShare": .914,
5218
+ "msMean": .785
5219
+ },
5220
+ "3": {
5221
+ "inputs": 35,
5222
+ "hardRegret": 0,
5223
+ "excessAreaRegret": 0,
5224
+ "fillRegret": 0,
5225
+ "wins": 34,
5226
+ "winShare": .971,
5227
+ "msMean": 1.303
5228
+ }
5229
+ },
5230
+ "prefixMedianMs": {
5231
+ "1": .378,
5232
+ "2": .809,
5233
+ "3": 1.33
5234
+ },
5235
+ "defaultMembers": 3
5236
+ },
5237
+ "polygon/100/uniform": {
5238
+ "inputs": 35,
5239
+ "thin": false,
5240
+ "sets": {
5241
+ "1": ["maxrects-bl"],
5242
+ "2": ["maxrects-bl", "maxrects-blsf"],
5243
+ "3": [
5244
+ "maxrects-bl",
5245
+ "maxrects-blsf",
5246
+ "shelf-first"
5247
+ ]
5248
+ },
5249
+ "train": {
5250
+ "1": {
5251
+ "inputs": 35,
5252
+ "hardRegret": 0,
5253
+ "excessAreaRegret": 0,
5254
+ "fillRegret": .019,
5255
+ "wins": 26,
5256
+ "winShare": .743,
5257
+ "msMean": .552
5258
+ },
5259
+ "2": {
5260
+ "inputs": 35,
5261
+ "hardRegret": 0,
5262
+ "excessAreaRegret": 0,
5263
+ "fillRegret": .007,
5264
+ "wins": 29,
5265
+ "winShare": .829,
5266
+ "msMean": 1.036
5267
+ },
5268
+ "3": {
5269
+ "inputs": 35,
5270
+ "hardRegret": 0,
5271
+ "excessAreaRegret": 0,
5272
+ "fillRegret": 0,
5273
+ "wins": 35,
5274
+ "winShare": 1,
5275
+ "msMean": 1.406
5276
+ }
5277
+ },
5278
+ "prefixMedianMs": {
5279
+ "1": .519,
5280
+ "2": .989,
5281
+ "3": 1.357
5282
+ },
5283
+ "defaultMembers": 3
5284
+ },
5285
+ "polygon/1k/heavyTail": {
5286
+ "inputs": 35,
5287
+ "thin": false,
5288
+ "sets": {
5289
+ "1": ["maxrects-cp"],
5290
+ "2": ["maxrects-cp"],
5291
+ "3": ["maxrects-cp"]
5292
+ },
5293
+ "train": {
5294
+ "1": {
5295
+ "inputs": 35,
5296
+ "hardRegret": 0,
5297
+ "excessAreaRegret": 0,
5298
+ "fillRegret": 0,
5299
+ "wins": 35,
5300
+ "winShare": 1,
5301
+ "msMean": .981
5302
+ },
5303
+ "2": {
5304
+ "inputs": 35,
5305
+ "hardRegret": 0,
5306
+ "excessAreaRegret": 0,
5307
+ "fillRegret": 0,
5308
+ "wins": 35,
5309
+ "winShare": 1,
5310
+ "msMean": .981
5311
+ },
5312
+ "3": {
5313
+ "inputs": 35,
5314
+ "hardRegret": 0,
5315
+ "excessAreaRegret": 0,
5316
+ "fillRegret": 0,
5317
+ "wins": 35,
5318
+ "winShare": 1,
5319
+ "msMean": .981
5320
+ }
5321
+ },
5322
+ "prefixMedianMs": {
5323
+ "1": .769,
5324
+ "2": .769,
5325
+ "3": .769
5326
+ },
5327
+ "defaultMembers": 1
5328
+ },
5329
+ "polygon/1k/uniform": {
5330
+ "inputs": 35,
5331
+ "thin": false,
5332
+ "sets": {
5333
+ "1": ["shelf-first"],
5334
+ "2": ["shelf-first", "maxrects-blsf"],
5335
+ "3": [
5336
+ "shelf-first",
5337
+ "maxrects-blsf",
5338
+ "maxrects-bl"
5339
+ ]
5340
+ },
5341
+ "train": {
5342
+ "1": {
5343
+ "inputs": 35,
5344
+ "hardRegret": 0,
5345
+ "excessAreaRegret": 0,
5346
+ "fillRegret": .013,
5347
+ "wins": 31,
5348
+ "winShare": .886,
5349
+ "msMean": 11.31
5350
+ },
5351
+ "2": {
5352
+ "inputs": 35,
5353
+ "hardRegret": 0,
5354
+ "excessAreaRegret": 0,
5355
+ "fillRegret": -.001,
5356
+ "wins": 34,
5357
+ "winShare": .971,
5358
+ "msMean": 16.795
5359
+ },
5360
+ "3": {
5361
+ "inputs": 35,
5362
+ "hardRegret": 0,
5363
+ "excessAreaRegret": 0,
5364
+ "fillRegret": -.001,
5365
+ "wins": 35,
5366
+ "winShare": 1,
5367
+ "msMean": 24.24
5368
+ }
5369
+ },
5370
+ "prefixMedianMs": {
5371
+ "1": 10.381,
5372
+ "2": 16.052,
5373
+ "3": 23.567
5374
+ },
5375
+ "defaultMembers": 3
5376
+ },
5377
+ "rect/1/identical": {
5378
+ "inputs": 10,
5379
+ "thin": true
5380
+ },
5381
+ "rect/10/heavyTail": {
5382
+ "inputs": 40,
5383
+ "thin": false,
5384
+ "sets": {
5385
+ "1": ["maxrects-bl"],
5386
+ "2": ["maxrects-bl", "rows"],
5387
+ "3": [
5388
+ "maxrects-bl",
5389
+ "rows",
5390
+ "maxrects-blsf"
5391
+ ]
5392
+ },
5393
+ "train": {
5394
+ "1": {
5395
+ "inputs": 40,
5396
+ "hardRegret": 0,
5397
+ "excessAreaRegret": 0,
5398
+ "fillRegret": .049,
5399
+ "wins": 22,
5400
+ "winShare": .55,
5401
+ "msMean": .02
5402
+ },
5403
+ "2": {
5404
+ "inputs": 40,
5405
+ "hardRegret": 0,
5406
+ "excessAreaRegret": 0,
5407
+ "fillRegret": .013,
5408
+ "wins": 29,
5409
+ "winShare": .725,
5410
+ "msMean": .047
5411
+ },
5412
+ "3": {
5413
+ "inputs": 40,
5414
+ "hardRegret": 0,
5415
+ "excessAreaRegret": 0,
5416
+ "fillRegret": .007,
5417
+ "wins": 33,
5418
+ "winShare": .825,
5419
+ "msMean": .07
5420
+ }
5421
+ },
5422
+ "prefixMedianMs": {
5423
+ "1": .016,
5424
+ "2": .037,
5425
+ "3": .055
5426
+ },
5427
+ "defaultMembers": 3
5428
+ },
5429
+ "rect/10/identical": {
5430
+ "inputs": 5,
5431
+ "thin": true
5432
+ },
5433
+ "rect/10/uniform": {
5434
+ "inputs": 40,
5435
+ "thin": false,
5436
+ "sets": {
5437
+ "1": ["maxrects-bl"],
5438
+ "2": ["maxrects-bl", "shelf-next"],
5439
+ "3": [
5440
+ "maxrects-bl",
5441
+ "shelf-next",
5442
+ "maxrects-baf"
5443
+ ]
5444
+ },
5445
+ "train": {
5446
+ "1": {
5447
+ "inputs": 40,
5448
+ "hardRegret": 0,
5449
+ "excessAreaRegret": 0,
5450
+ "fillRegret": .035,
5451
+ "wins": 27,
5452
+ "winShare": .675,
5453
+ "msMean": .043
5454
+ },
5455
+ "2": {
5456
+ "inputs": 40,
5457
+ "hardRegret": 0,
5458
+ "excessAreaRegret": 0,
5459
+ "fillRegret": .016,
5460
+ "wins": 33,
5461
+ "winShare": .825,
5462
+ "msMean": .114
5463
+ },
5464
+ "3": {
5465
+ "inputs": 40,
5466
+ "hardRegret": 0,
5467
+ "excessAreaRegret": 0,
5468
+ "fillRegret": .001,
5469
+ "wins": 37,
5470
+ "winShare": .925,
5471
+ "msMean": .173
5472
+ }
5473
+ },
5474
+ "prefixMedianMs": {
5475
+ "1": .027,
5476
+ "2": .086,
5477
+ "3": .11
5478
+ },
5479
+ "defaultMembers": 3
5480
+ },
5481
+ "rect/100/heavyTail": {
5482
+ "inputs": 45,
5483
+ "thin": false,
5484
+ "sets": {
5485
+ "1": ["maxrects-bl"],
5486
+ "2": ["maxrects-bl", "maxrects-cp"],
5487
+ "3": [
5488
+ "maxrects-bl",
5489
+ "maxrects-cp",
5490
+ "maxrects-bssf"
5491
+ ]
5492
+ },
5493
+ "train": {
5494
+ "1": {
5495
+ "inputs": 45,
5496
+ "hardRegret": 0,
5497
+ "excessAreaRegret": .002,
5498
+ "fillRegret": .003,
5499
+ "wins": 30,
5500
+ "winShare": .667,
5501
+ "msMean": .097
5502
+ },
5503
+ "2": {
5504
+ "inputs": 45,
5505
+ "hardRegret": 0,
5506
+ "excessAreaRegret": .001,
5507
+ "fillRegret": .001,
5508
+ "wins": 38,
5509
+ "winShare": .844,
5510
+ "msMean": .208
5511
+ },
5512
+ "3": {
5513
+ "inputs": 45,
5514
+ "hardRegret": 0,
5515
+ "excessAreaRegret": 0,
5516
+ "fillRegret": .001,
5517
+ "wins": 42,
5518
+ "winShare": .933,
5519
+ "msMean": .351
5520
+ }
5521
+ },
5522
+ "prefixMedianMs": {
5523
+ "1": .083,
5524
+ "2": .15,
5525
+ "3": .349
5526
+ },
5527
+ "defaultMembers": 3
5528
+ },
5529
+ "rect/100/identical": {
5530
+ "inputs": 5,
5531
+ "thin": true
5532
+ },
5533
+ "rect/100/uniform": {
5534
+ "inputs": 40,
5535
+ "thin": false,
5536
+ "sets": {
5537
+ "1": ["maxrects-bl"],
5538
+ "2": ["maxrects-bl", "shelf-first"],
5539
+ "3": [
5540
+ "maxrects-bl",
5541
+ "shelf-first",
5542
+ "maxrects-blsf"
5543
+ ]
5544
+ },
5545
+ "train": {
5546
+ "1": {
5547
+ "inputs": 40,
5548
+ "hardRegret": 0,
5549
+ "excessAreaRegret": 0,
5550
+ "fillRegret": .006,
5551
+ "wins": 31,
5552
+ "winShare": .775,
5553
+ "msMean": .208
5554
+ },
5555
+ "2": {
5556
+ "inputs": 40,
5557
+ "hardRegret": 0,
5558
+ "excessAreaRegret": 0,
5559
+ "fillRegret": .001,
5560
+ "wins": 38,
5561
+ "winShare": .95,
5562
+ "msMean": .413
5563
+ },
5564
+ "3": {
5565
+ "inputs": 40,
5566
+ "hardRegret": 0,
5567
+ "excessAreaRegret": 0,
5568
+ "fillRegret": 0,
5569
+ "wins": 39,
5570
+ "winShare": .975,
5571
+ "msMean": .648
5572
+ }
5573
+ },
5574
+ "prefixMedianMs": {
5575
+ "1": .196,
5576
+ "2": .367,
5577
+ "3": .519
5578
+ },
5579
+ "defaultMembers": 3
5580
+ },
5581
+ "rect/1k/heavyTail": {
5582
+ "inputs": 35,
5583
+ "thin": false,
5584
+ "sets": {
5585
+ "1": ["maxrects-cp"],
5586
+ "2": ["maxrects-cp"],
5587
+ "3": ["maxrects-cp"]
5588
+ },
5589
+ "train": {
5590
+ "1": {
5591
+ "inputs": 35,
5592
+ "hardRegret": 0,
5593
+ "excessAreaRegret": 0,
5594
+ "fillRegret": 0,
5595
+ "wins": 35,
5596
+ "winShare": 1,
5597
+ "msMean": .679
5598
+ },
5599
+ "2": {
5600
+ "inputs": 35,
5601
+ "hardRegret": 0,
5602
+ "excessAreaRegret": 0,
5603
+ "fillRegret": 0,
5604
+ "wins": 35,
5605
+ "winShare": 1,
5606
+ "msMean": .679
5607
+ },
5608
+ "3": {
5609
+ "inputs": 35,
5610
+ "hardRegret": 0,
5611
+ "excessAreaRegret": 0,
5612
+ "fillRegret": 0,
5613
+ "wins": 35,
5614
+ "winShare": 1,
5615
+ "msMean": .679
5616
+ }
5617
+ },
5618
+ "prefixMedianMs": {
5619
+ "1": .554,
5620
+ "2": .554,
5621
+ "3": .554
5622
+ },
5623
+ "defaultMembers": 1
5624
+ },
5625
+ "rect/1k/uniform": {
5626
+ "inputs": 35,
5627
+ "thin": false,
5628
+ "sets": {
5629
+ "1": ["shelf-first"],
5630
+ "2": ["shelf-first", "maxrects-bl"],
5631
+ "3": ["shelf-first", "maxrects-bl"]
5632
+ },
5633
+ "train": {
5634
+ "1": {
5635
+ "inputs": 35,
5636
+ "hardRegret": 0,
5637
+ "excessAreaRegret": 0,
5638
+ "fillRegret": .004,
5639
+ "wins": 30,
5640
+ "winShare": .857,
5641
+ "msMean": 4.737
5642
+ },
5643
+ "2": {
5644
+ "inputs": 35,
5645
+ "hardRegret": 0,
5646
+ "excessAreaRegret": 0,
5647
+ "fillRegret": -.001,
5648
+ "wins": 35,
5649
+ "winShare": 1,
5650
+ "msMean": 9.299
5651
+ },
5652
+ "3": {
5653
+ "inputs": 35,
5654
+ "hardRegret": 0,
5655
+ "excessAreaRegret": 0,
5656
+ "fillRegret": -.001,
5657
+ "wins": 35,
5658
+ "winShare": 1,
5659
+ "msMean": 9.299
5660
+ }
5661
+ },
5662
+ "prefixMedianMs": {
5663
+ "1": 4.185,
5664
+ "2": 8.887,
5665
+ "3": 8.887
5666
+ },
5667
+ "defaultMembers": 2
5668
+ }
5669
+ }
5670
+ };
5671
+ // src/portfolio-cell.ts
5672
+ /**
5673
+ * The thresholds of the spread bands. The statistic is the standard deviation of the natural log of the linear size
5674
+ * `sqrt(w * h)` of each item.
5675
+ *
5676
+ * - Below `identical`, the band is `identical`.
5677
+ * - Below `uniform`, the band is `uniform`.
5678
+ * - At `uniform` or above, the band is `heavyTail`.
5679
+ *
5680
+ * On the seeds 1 to 7 of the generators of `pack-screen-v1`, the uniform sizes give 0.258 at most. The heavy-tail sizes give 0.278 at least.
5681
+ */
5682
+ const SPREAD_THRESHOLDS = Object.freeze({
5683
+ identical: .02,
5684
+ uniform: .27
5685
+ });
5686
+ /** A cell with fewer inputs than this count in the training records is thin. It uses the set of its container shape. */
5687
+ const THIN_INPUTS = 12;
5688
+ /**
5689
+ * The frame budget of the default member count, in milliseconds. The default count of a cell is the largest prefix of its
5690
+ * set of 3 that fits this budget. The prefix fits when its median summed member time on the CI records is this value or less.
5691
+ * The count is 1 or more at all times.
5692
+ * The default output thus does not depend on the clock: a time limit is only the opt-in option `budgetMs`.
5693
+ */
5694
+ const PORTFOLIO_FRAME_MS = 50;
5695
+ /** This function gives the key of a cell: `<shape>/<count>/<spread>`, for example `rect/100/uniform`. */
5696
+ function cellKey(cell) {
5697
+ return `${cell.shape}/${cell.count}/${cell.spread}`;
3571
5698
  }
3572
5699
  /**
3573
- * This function packs an input with the strategy of an id. The options go over the defaults of the strategy. The
3574
- * context gets `mulberry32` with the seed. The default seed is 0.
5700
+ * This function gives the spread statistic of an input: the standard deviation of the natural log of `sqrt(w * h)` of each item.
5701
+ * An item with no area does not count. Fewer than 2 items with an area give 0.
3575
5702
  */
3576
- function packWith(id, input, options, seed = 0) {
3577
- const s = strategy(id);
3578
- const merged = {
3579
- ...s.defaults,
3580
- ...options
5703
+ function spreadOf(input) {
5704
+ const logs = [];
5705
+ for (const item of input.items) {
5706
+ const area = item.w * item.h;
5707
+ if (area > 0 && Number.isFinite(area)) logs.push(Math.log(area) / 2);
5708
+ }
5709
+ if (logs.length < 2) return 0;
5710
+ const mean = logs.reduce((a, b) => a + b, 0) / logs.length;
5711
+ return Math.sqrt(logs.reduce((a, b) => a + (b - mean) ** 2, 0) / logs.length);
5712
+ }
5713
+ /** This function gives the band of a spread statistic by `SPREAD_THRESHOLDS`. */
5714
+ function spreadBand(spread) {
5715
+ if (spread < SPREAD_THRESHOLDS.identical) return "identical";
5716
+ return spread < SPREAD_THRESHOLDS.uniform ? "uniform" : "heavyTail";
5717
+ }
5718
+ /**
5719
+ * This function gives the cell of an input for the per-cell portfolio. The function reads only the input, not a corpus id.
5720
+ *
5721
+ * - `shape` is the `containerShape` of `cellOf`.
5722
+ * - `count` is `countCell` of the count of the items.
5723
+ * - `spread` is `spreadBand` of `spreadOf`.
5724
+ */
5725
+ function portfolioCell(input) {
5726
+ return {
5727
+ shape: cellOf(input).containerShape,
5728
+ count: countCell(input.items.length),
5729
+ spread: spreadBand(spreadOf(input))
5730
+ };
5731
+ }
5732
+ /** This function gives the sets of an input from a table: the sets of its cell, or of its shape, or of all the inputs. */
5733
+ function portfolioSetOf(input, table = PORTFOLIO_SETS) {
5734
+ const cell = portfolioCell(input);
5735
+ const key = cellKey(cell);
5736
+ const own = table.cells[key];
5737
+ if (own?.sets !== void 0) return {
5738
+ key,
5739
+ source: "cell",
5740
+ sets: own
5741
+ };
5742
+ const shape = table.shapes[cell.shape];
5743
+ if (shape?.sets !== void 0) return {
5744
+ key,
5745
+ source: "shape",
5746
+ sets: shape
5747
+ };
5748
+ return {
5749
+ key,
5750
+ source: "default",
5751
+ sets: table.all
3581
5752
  };
3582
- return s.pack(input, merged, createContext(seed));
5753
+ }
5754
+ /**
5755
+ * This function gives the `k` members of an input for `packPortfolio`. The members are the set of the cell of the input.
5756
+ * A thin cell or an unknown cell takes the set of its shape, or the set of all the inputs. The function throws a `RangeError` for a `k` other than 1, 2 or 3.
5757
+ */
5758
+ function portfolioMembers(input, k, table = PORTFOLIO_SETS) {
5759
+ if (k !== 1 && k !== 2 && k !== 3) throw new RangeError(`The size of a portfolio set is 1, 2 or 3, not ${k}.`);
5760
+ return portfolioSetOf(input, table).sets.sets[`${k}`].map((id) => {
5761
+ const e = table.entries[id];
5762
+ if (e === void 0) throw new RangeError(`The table of the portfolio sets has no entry "${id}".`);
5763
+ return { ...e };
5764
+ });
5765
+ }
5766
+ /**
5767
+ * This function gives the default member count of an input: `defaultMembers` of the sets of its cell, its shape or all the inputs.
5768
+ * With a `k`, the count is not more than `k`. A table without the count gives `k`, or 3 without a `k`.
5769
+ */
5770
+ function portfolioDefaultMembers(input, k, table = PORTFOLIO_SETS) {
5771
+ const count = portfolioSetOf(input, table).sets.defaultMembers ?? 3;
5772
+ return k === void 0 ? count : Math.min(count, k);
3583
5773
  }
3584
5774
  // src/check.ts
3585
5775
  /** This function tells if the insides of two boxes overlap by more than a tolerance on each axis. */
@@ -3736,14 +5926,17 @@ function hardBreaks(input, output) {
3736
5926
  * Its `pick(input)` packs the input with each member and gives the output of the winner, its id and the trace.
3737
5927
  *
3738
5928
  * - A member is a strategy id, or a `PortfolioEntry` with options. The members run in the given order.
5929
+ * - `members` is a list, or a function of the input that gives the list. The strategy `portfolio` uses the function form.
3739
5930
  * - The key is the hard breaks, then `pack.overflow.excessArea`, then `pack.fill`. `PORTFOLIO_LEVELS` gives the specs.
5931
+ * - The key reads the measures after `roundMeasures`, as a record keeps them. A replay of the records gives the same pick.
3740
5932
  * - The hash of the key is `outputHash`. `selectBest` of the contract picks the winner.
3741
5933
  * - The output of the winner gets the trace stage `portfolio` with `move.pick` of `pickMoves`.
3742
5934
  * - The function throws a `RangeError` for an unknown strategy, an empty list and two members with the same id.
5935
+ * With the function form, `pick` throws this error for the list of an input.
3743
5936
  */
3744
5937
  function packPortfolio(members, options = {}) {
3745
5938
  const seed = options.seed ?? 0;
3746
- const list = members.map((m) => {
5939
+ const toMembers = (given) => given.map((m) => {
3747
5940
  const e = typeof m === "string" ? {
3748
5941
  id: m,
3749
5942
  strategy: m
@@ -3754,11 +5947,12 @@ function packPortfolio(members, options = {}) {
3754
5947
  run: (input) => packWith(e.strategy, input, e.options, seed)
3755
5948
  };
3756
5949
  });
5950
+ const list = typeof members === "function" ? (input) => toMembers(members(input)) : toMembers(members);
3757
5951
  const cache = /* @__PURE__ */ new WeakMap();
3758
5952
  const measured = (input, output) => {
3759
5953
  let m = cache.get(output);
3760
5954
  if (m === void 0) {
3761
- m = measure(input, output);
5955
+ m = roundMeasures(measure(input, output));
3762
5956
  cache.set(output, m);
3763
5957
  }
3764
5958
  return m;
@@ -3798,6 +5992,90 @@ function packPortfolio(members, options = {}) {
3798
5992
  run: (input) => pick(input).output
3799
5993
  };
3800
5994
  }
5995
+ // src/portfolio-strategy.ts
5996
+ /** The single strategies that the members of the table use */
5997
+ const SINGLES = [
5998
+ rows,
5999
+ skyline,
6000
+ shelf,
6001
+ push,
6002
+ maxrects
6003
+ ];
6004
+ /** This function gives the union of the supports of the strategies of the members of the table. */
6005
+ function unionSupports() {
6006
+ const used = new Set(Object.values(PORTFOLIO_SETS.entries).map((e) => e.strategy));
6007
+ const out = {};
6008
+ for (const s of SINGLES.filter((x) => used.has(x.id))) for (const [dim, values] of Object.entries(s.supports)) {
6009
+ const list = out[dim] ??= [];
6010
+ for (const v of values) if (!list.includes(v)) list.push(v);
6011
+ }
6012
+ return out;
6013
+ }
6014
+ /**
6015
+ * The strategy `portfolio`: `packPortfolio` with the function form `(input) => portfolioMembers(input, k)`. The seed of the context
6016
+ * goes to each member. Its supports are the union of the supports of the members.
6017
+ *
6018
+ * - Without `k` and `maxMembers`, the members are the set of 3 of the cell, and `maxMembers` is `defaultMembers` of the cell.
6019
+ * The default output thus does not depend on the clock.
6020
+ * - A member that does not support the cell of an input throws, and it does not win. When each member throws, the strategy throws the first error.
6021
+ * - The option `budgetMs` goes to `portfolio` of the contract. The first member always runs.
6022
+ * - The strategy throws a `RangeError` for a `k` other than 2 or 3.
6023
+ */
6024
+ const portfolioStrategy = {
6025
+ id: "portfolio",
6026
+ family: "portfolio",
6027
+ catalog: [],
6028
+ supports: unionSupports(),
6029
+ defaults: {},
6030
+ deterministic: true,
6031
+ pack(input, options, context) {
6032
+ const { k, maxMembers, budgetMs } = options;
6033
+ if (k !== void 0 && k !== 2 && k !== 3) throw new RangeError(`The option k of the strategy portfolio is 2 or 3, not ${String(k)}.`);
6034
+ const size = k ?? 3;
6035
+ const count = maxMembers ?? (k === void 0 ? portfolioDefaultMembers(input) : void 0);
6036
+ const limits = {
6037
+ ...count === void 0 ? {} : { maxMembers: count },
6038
+ ...budgetMs === void 0 ? {} : { budgetMs }
6039
+ };
6040
+ return packPortfolio((x) => portfolioMembers(x, size), {
6041
+ id: k === void 0 ? "portfolio" : `portfolio-k${k}`,
6042
+ seed: context.seed,
6043
+ ...limits
6044
+ }).run(input);
6045
+ }
6046
+ };
6047
+ // src/registry.ts
6048
+ /** Each single strategy of the package. The benchmark starts each one on each input of the corpus. */
6049
+ const strategies = Object.freeze([
6050
+ rows,
6051
+ skyline,
6052
+ shelf,
6053
+ push,
6054
+ maxrects
6055
+ ]);
6056
+ /**
6057
+ * The composite strategies of the registry: each one packs an input with other strategies. They are not in `strategies`.
6058
+ * Since 0.2.7, the list has `portfolio` of roadmap item k20.
6059
+ */
6060
+ const composites = Object.freeze([portfolioStrategy]);
6061
+ /** This function gives the strategy with an id, also a composite strategy. It throws a `RangeError` for an id that the registry does not have. */
6062
+ function strategy(id) {
6063
+ const found = strategies.find((s) => s.id === id) ?? composites.find((s) => s.id === id);
6064
+ if (found === void 0) throw new RangeError(`The registry has no strategy "${id}".`);
6065
+ return found;
6066
+ }
6067
+ /**
6068
+ * This function packs an input with the strategy of an id. The options go over the defaults of the strategy. The
6069
+ * context gets `mulberry32` with the seed. The default seed is 0.
6070
+ */
6071
+ function packWith(id, input, options, seed = 0) {
6072
+ const s = strategy(id);
6073
+ const merged = {
6074
+ ...s.defaults,
6075
+ ...options
6076
+ };
6077
+ return s.pack(input, merged, createContext(seed));
6078
+ }
3801
6079
  // src/generators.ts
3802
6080
  /** The largest count of boxes that a generator makes. */
3803
6081
  const MAX_COUNT = 1e5;
@@ -4712,6 +6990,6 @@ function corpus(name, specs) {
4712
6990
  inputs
4713
6991
  };
4714
6992
  }
4715
- export { DEFAULT_TOLERANCE, EPS, MAXRECTS_BANDS, MAXRECTS_RULES, MEASURE_SPECS, PORTFOLIO_LEVELS, PORTFOLIO_STAGE, RECORD_EPS, Rect, SHELF_FITS, SORT_ORDERS, UnsupportedCell, Vector, aspectError, assertSupported, canonicalJson, cards, cellOf, checkHard, checkInput, compareRects, corpus, countCell, createContext, dashboard, edgeCases, fnv1a32, freeSpace, fromRects, gallery, generator, generators, hardBreaks, hashInput, isDeterministic, logSweep, lowestWindow, marginOf, maxrects, measure, measureChange, medianRatio, mulberry32, outputHash, pack, packFree, packMaxRects, packPortfolio, packRows, packShelf, packSkyline, packWith, packingMetrics, pairedRatio, push, pushCascade, quantile, rectGrid, rectScattered, round3, roundMeasures, rows, shelf, skyline, strategies, strategy, supportsCell, tailShare, toPackInput, toRects, turnItem, turnPoint, turnPort, turnRegion, unsupportedOf, wordCloud };
6993
+ export { DEFAULT_TOLERANCE, EPS, MAXRECTS_BANDS, MAXRECTS_RULES, MEASURE_SPECS, PORTFOLIO_FRAME_MS, PORTFOLIO_LEVELS, PORTFOLIO_SETS, PORTFOLIO_STAGE, RECORD_EPS, Rect, SHELF_FITS, SORT_ORDERS, SPREAD_THRESHOLDS, THIN_INPUTS, UnsupportedCell, Vector, aspectError, assertSupported, canonicalJson, cards, cellKey, cellOf, checkHard, checkInput, compareRects, composites, corpus, countCell, createContext, dashboard, edgeCases, fnv1a32, freeSpace, fromRects, gallery, generator, generators, hardBreaks, hashInput, isDeterministic, logSweep, lowestWindow, marginOf, maxrects, measure, measureChange, medianRatio, mulberry32, outputHash, pack, packFree, packMaxRects, packPortfolio, packRows, packShelf, packSkyline, packWith, packingMetrics, pairedRatio, portfolioCell, portfolioDefaultMembers, portfolioMembers, portfolioSetOf, portfolioStrategy, push, pushCascade, quantile, rectGrid, rectScattered, round3, roundMeasures, rows, shelf, skyline, spreadBand, spreadOf, strategies, strategy, supportsCell, tailShare, toPackInput, toRects, turnItem, turnPoint, turnPort, turnRegion, unsupportedOf, wordCloud };
4716
6994
 
4717
6995
  //# sourceMappingURL=index.js.map