рдЖрдиреБрд╡рдВрд╢рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ (рдмрд┐рди рдкреИрдХрд┐рдВрдЧ)

рдЕрдЪреНрдЫреЗ рджрд┐рди, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде , рдореИрдВ рдЖрдиреБрд╡рдВрд╢рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рджреНрд╡рд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП EvoJ - Java рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред
рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ EvoJ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП Habr рдкрд╛рдардХреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ред

рдЖрдЬ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдИрд╡реЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬрд┐рд╕реЗ рдЗрди рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдирд┐рдХ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрдкреЗрдХреНрд╖рд┐рдд рд╣реИ)ред рд▓рдХреНрд╖реНрдп рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреЗрд░ рдХрд░рдирд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди рд╡рд┐рд╡рд░рдг рд╡рд┐рдзрд┐ рдЪреБрдирдирд╛


EvoJ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЙрди рдЪрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЙрд╕рдореЗрдВ рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рдирд╛ рд╣реИ:
public interface Solution { List<List<Integer>> getContainers(); } 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рднрд╛рдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдЧрд┐рд░ рдЧрдПред

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ EvoJ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдирд┐рд░реНрдгрдпреЛрдВ рдХреА рд╕реНрдХреНрд░реАрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдЬрдм рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЧрд┐рд░рддреА рд╣реИред

рдПрдХ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдЧрд┐рд░ рдЧрдИ:

 public interface Solution { @ListParams(length = "itemsCount", elementRange = @Range(strict = "true", min = "0", max = "lastBinIndex"), elementMutationRange = @MutationRange(value = "100%")) List<Integer> getBinIndices(); } 

рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдЯрдо рдЧрд┐рд░ рдЧрдпрд╛ред

рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ EvoJ рдЪрд╛рд▓реЗрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ, рдФрд░ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЪрд░ рдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддрд╛ рд╣реИред
рджреВрд╕рд░реЗ, рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ MutationRange=100% рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореНрдпреВрдЯреЗрд╢рди рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡рд╕реНрддреБ рдХреЗрд╡рд▓ рдмрд╛рд░реАрдХреА рд╕реЗ рд╕реНрдерд┐рдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреА рджрдХреНрд╖рддрд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрдЧреАред

рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛ рдЪрдпрди


рдкреНрд░рд╛рдХреГрддрд┐рдХ рдлрд┐рдЯрдиреЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рддреЗ рд╣реИрдВред

рд╕рдорд╛рдзрд╛рди 1


рдирд┐рд░реНрдгрдп реи


рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рди рддреАрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдХрдмреНрдЬреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдореНрдпреВрдЯреЗрд╢рди рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рдкрд╣рд▓реЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ, рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЗрд╡рд▓ рджреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдХреА "рдлрд┐рдЯрдиреЗрд╕" рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХреЗрддрдХ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ - рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдпреЛрдЧ (рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд╛рди рдореБрдХреНрдд рд╕реНрдерд╛рди рд╕рдорд╛рди рд╣реЛрдЧрд╛)ред

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХрдВрдЯреЗрдирд░ рдУрд╡рд░рд▓реЛрдбреЗрдб рд╣реЛрдВред рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдирд┐рд░реНрдгрдп рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬреАрди рдкреВрд▓ рдХреЗ рдРрд╕реЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЙрдирдХреА рд░реЗрдЯрд┐рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рдЬрд╛рдПред рджреВрд╕рд░реА рдУрд░, рднреАрдбрд╝рднрд╛рдбрд╝ рдЫреЛрдЯреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрдмрдХрд┐ рд╕рдорд╛рдзрд╛рди рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐, рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рд╕рдлрд▓ рдХреНрд░реЙрд╕рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдзрд┐рднрд╛рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рд╕рдорд╛рдзрд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рд╕рдВрдХреЗрддрдХ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ - рд╡рд░реНрдЧ рдХреЗ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдпреЛрдЧред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрднрд┐рдиреНрди рд╕рдВрдХреЗрддрдХ рдореЗрдВ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдИрд╡реЛрдЬреЗ рдЖрдкрдХреЛ рдлрд┐рдЯрдиреЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХрд┐рд╕реА рднреА Comparable рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдпреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдЕрдкрдиреА рдХреНрд▓рд╛рд╕ рд▓реЗрдВред

 public class PackRating implements Comparable { private int binsUsed; private int score; private int overflow; public PackRating(int binsUsed, int score, int overflow) { this.binsUsed = binsUsed; this.score = score; this.overflow = overflow; } public int compareTo(Object o) { PackRating other = (PackRating) o; if (this.overflow != other.overflow) { return other.overflow - this.overflow; } if (this.binsUsed != other.binsUsed) { return other.binsUsed - this.binsUsed; } return this.score - other.score; } public int getBinsUsed() { return binsUsed; } public int getOverflow() { return overflow; } public int getScore() { return score; } } 


рдпрд╣рд╛рдБ binsUsed рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред score рдлрд╝реАрд▓реНрдб рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреНрд╖реЗрддреНрд░ рдХрдВрдЯреЗрдирд░ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣реИред

рддреБрд▓рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХреЛ рднреАрдбрд╝ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рд╕реЗ рдмреЗрд╣рддрд░ рдорд╛рдирддреА рд╣реИ, рдЬрдм рднреАрдбрд╝ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ, рд╡реНрдпрд╕реНрдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдХрдо рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ score рдлрд╝реАрд▓реНрдб (рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░) рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред ред

рдпрд╣ рдлрд┐рдЯрдиреЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, AbstractSimpleRating рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдХрд░реВрдБрдЧрд╛ред

 public class BinPackRatingCalculator extends AbstractSimpleRating<Solution> { private int[] items; private int[] bins; public BinPackRatingCalculator(int[] items, int[] bins) { this.items = items; this.bins = bins; } @Override protected Comparable doCalcRating(Solution solution) { int[] tmpBins = new int[bins.length]; int score = 0; int overflow = 0; int binsUsed = 0; final List<Integer> indicex = solution.getBinIndices(); for (int item = 0; item < indicex.size(); item++) { Integer binIndex = indicex.get(item); tmpBins[binIndex] += items[item]; } for (int bin = 0; bin < tmpBins.length; bin++) { int dl = bins[bin] - tmpBins[bin]; final int dl2 = dl * dl; if (dl < 0) { overflow += dl2; } else { score += dl2; } if (tmpBins[bin] > 0) { binsUsed++; } } return new PackRating(binsUsed, score, overflow); } } 


рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдмрд╕ рд╣рдорд╛рд░реЗ рдлрд┐рдЯрдиреЗрд╕ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ PackRating рд╡рд░реНрдЧ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред

рд╕рдмрдХреБрдЫ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо


main рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ:

  public static void main(String[] args) { int[] items = {3, 2, 4, 4, 5, 3, 4, 5, 6}; int[] bins = {8, 8, 8, 8, 8, 4, 12, 12, 8, 6}; Map<String, String> context = new HashMap<String, String>(); context.put("itemsCount", Integer.toString(items.length)); context.put("lastBinIndex", Integer.toString(bins.length - 1)); DefaultPoolFactory factory = new DefaultPoolFactory(); GenePool<Solution> pool = factory.createPool(200, Solution.class, context); DefaultHandler handler = new DefaultHandler(new BinPackRatingCalculator(items, bins), null, null, null); handler.iterate(pool, 40); Solution bestSolution = pool.getBestSolution(); showSolution(bestSolution, bins, items); } 


рдпрд╣рд╛рдВ, items рд╕рд░рдгреА рдореЗрдВ items рдХреЗ рд╕рд╢рд░реНрдд рдЖрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред bins рд╕рд░рдгреА рдЙрдкрд▓рдмреНрдз рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рд╢рд░реНрдд рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ Solution рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП, рдХреЛрдб рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: рдПрдХ рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛, 200 рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрдмрд╛рджреА рдмрдирд╛рдирд╛, рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛ рдФрд░ 40 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ред

рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдЪрд╛рд░ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ 200 рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЖрдмрд╛рджреА рдкрд░ 1000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рдЧрднрдЧ рджреЛ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

рдЕрдВрддрднрд╛рд╖рдг


рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рд╢рд╛рд╕реНрддреНрд░реАрдп рдПрдирдкреА-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЖрдиреБрд╡рдВрд╢рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдиреБрд╡рдВрд╢рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдЖрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП , рдорд╛рдирд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In139646/


All Articles