pack[reg_,n_]:=Block[{disk,diski,circi,cons,consDJ,x,y,r,time,ds,cs,pf},disk=Disk[{x,y},r];(*Definetheinitialdisk*)diski[i_]=Disk[{x[i],y[i]},r[i]];(*Definethediskifunctiontocreatediskswithvaryingradii*)circi[i_]=RegionBoundary[diski[i]];(*Definethecircifunctiontogettheboundaryofthedisks*)cons=List@@(RegionWithin[reg,disk]);consDJ[i_]:=RegionDisjoint[diski[i],disk];(*Performtheoptimizationandmeasurethetimetaken*)time=AbsoluteTiming@Do[{Thread[{x[i],y[i],r[i]}=NArgMax[{r,cons},{x,y,r}]],cons=Join[cons,{consDJ[i]}]},{i,n}];(*Calculateandprintthepackingfraction*)Print["optimization time = ",time[[1]]];pf=Sum[Area@diski[i],{i,n}]/Area[reg];Print["packing fraction =",pf];(*Displaythepackeddiskswithintheregion*)Show[Region[Style[reg,LightBrown,EdgeForm[{Thick,Black}]]],Graphics@Table[{Hue[0.8*(i-1)/n],diski[i]},{i,n}],Graphics@{Thick,Black,Table[circi[i],{i,n}]},Frame->True]]