Я пытаюсь выяснить, какой алгоритм сортировки будет работать лучше для следующего случая. Я играл с Knapsack Unbounded (используя https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/sets/knapsack-problem), но безуспешно, так как практически он максимизирует значение, а здесь я пытаюсь ограничить все значения при определенных ограничениях. Я считаю, что это сортировка, но был бы признателен за любые предложения иесли были бы полезны какие-либо образцы кода, доступные там:
У меня есть тысячи объектов (продуктов питания), каждый из которых имеет 4 значения: "serve_calories", "serve_carbs", "serve_fats" и "serve_proteins"Таким образом, он представляет, сколько представляет 1 порция этого продукта питания.
Цель состоит в том, чтобы придумать 3-6 случайных вариантов (с переменным количеством порций для каждого, что может быть шагом 0,5), гдеограничения предварительно определены для каждого значения для итогов. Числа могут иметь + -10% маржи для каждого (поэтому диапазон для каждого значения работает).
Пример: создать коллекцию опций, которые имеют в общей сложности:2000 калорий, 250 углеводов, 90 жиров, 100 белков.На основании приведенного ниже образца данных:
3 порции еды с идентификатором "33597" : 3 * ["сервировка_калорий": 418,62, "подача_карб": 38,58, "подача_жиров": 19,78, "подача_протеинов": 22,32] = [1255,86, 115,74, 59,34, 66,96]
2,5 порции еды с идентификатором "39383" : 2,5 * ["сервировка_калорий": 295, "подача_карбонов": 53,55, "подача_фатов": 3,81, "подача_протеинов": 16,31] = [737,5, 133,875, 9,525, 40,775]
1 порций пищи с идентификатором "33602" : 1 * ["сервировка_калорий": 175,26, "подача_углеродов": 10,81, "serve_fats ": 14,23," serve_proteins ": 5,29] = [175,26, 10,81, 14,23, 5,29]
Итого: [2168,62, 260,425, 83,095, 113,025]
Вот пример набора:
[
{"id":35583,"serving_calories":368.26,"serving_carbs":2.31,"serving_fats":24.51,"serving_proteins":32.46},
{"id":35584,"serving_calories":441.75,"serving_carbs":9.68,"serving_fats":30.23,"serving_proteins":33.65},
{"id":33595,"serving_calories":145.22,"serving_carbs":11.14,"serving_fats":1.5,"serving_proteins":22.77},
{"id":35421,"serving_calories":450.5,"serving_carbs":4.42,"serving_fats":19.64,"serving_proteins":60.68},
{"id":33596,"serving_calories":223.43,"serving_carbs":25.08,"serving_fats":10.57,"serving_proteins":9.1},
{"id":33597,"serving_calories":418.62,"serving_carbs":38.58,"serving_fats":19.78,"serving_proteins":22.32},
{"id":35200,"serving_calories":254.85,"serving_carbs":42.39,"serving_fats":9.8,"serving_proteins":2.88},
{"id":36130,"serving_calories":283.29,"serving_carbs":37.02,"serving_fats":6.42,"serving_proteins":19.23},
{"id":34522,"serving_calories":198.17,"serving_carbs":27.62,"serving_fats":5.67,"serving_proteins":9.52},
{"id":34520,"serving_calories":246.1,"serving_carbs":11.68,"serving_fats":5.44,"serving_proteins":36.63},
{"id":34521,"serving_calories":341.36,"serving_carbs":6.79,"serving_fats":13.73,"serving_proteins":45.06},
{"id":35215,"serving_calories":545.11,"serving_carbs":21.4,"serving_fats":23.89,"serving_proteins":59.96},
{"id":35219,"serving_calories":320.6,"serving_carbs":23.33,"serving_fats":8.66,"serving_proteins":35.12},
{"id":35423,"serving_calories":530.92,"serving_carbs":11.23,"serving_fats":45.07,"serving_proteins":23.49},
{"id":33599,"serving_calories":254.77,"serving_carbs":5.61,"serving_fats":11.91,"serving_proteins":29.32},
{"id":33601,"serving_calories":381.62,"serving_carbs":0.06,"serving_fats":33.58,"serving_proteins":18.52},
{"id":33600,"serving_calories":453.39,"serving_carbs":21.36,"serving_fats":28.08,"serving_proteins":37.38},
{"id":33598,"serving_calories":461.71,"serving_carbs":2.94,"serving_fats":36.56,"serving_proteins":28.46},
{"id":33602,"serving_calories":175.26,"serving_carbs":10.81,"serving_fats":14.23,"serving_proteins":5.29},
{"id":33604,"serving_calories":419.9,"serving_carbs":3.96,"serving_fats":20.04,"serving_proteins":53.89},
{"id":35557,"serving_calories":385.59,"serving_carbs":12.71,"serving_fats":31.72,"serving_proteins":16.39},
{"id":33603,"serving_calories":340.76,"serving_carbs":20.46,"serving_fats":20.09,"serving_proteins":20.29},
{"id":34526,"serving_calories":310.4,"serving_carbs":56.17,"serving_fats":3.6,"serving_proteins":13.41},
{"id":34528,"serving_calories":242.02,"serving_carbs":14.69,"serving_fats":5.81,"serving_proteins":32.03},
{"id":34537,"serving_calories":280.2,"serving_carbs":49.62,"serving_fats":5.94,"serving_proteins":11.37},
{"id":34538,"serving_calories":163.07,"serving_carbs":21.87,"serving_fats":5.91,"serving_proteins":5.66},
{"id":34539,"serving_calories":600.74,"serving_carbs":85.38,"serving_fats":21.93,"serving_proteins":18.71},
{"id":34529,"serving_calories":360,"serving_carbs":19,"serving_fats":7.97,"serving_proteins":50.96},
{"id":34543,"serving_calories":297.14,"serving_carbs":71.11,"serving_fats":1.46,"serving_proteins":6.73},
{"id":34544,"serving_calories":175.81,"serving_carbs":39.55,"serving_fats":1.29,"serving_proteins":5.75},
{"id":34524,"serving_calories":303.22,"serving_carbs":50.98,"serving_fats":6.49,"serving_proteins":14.6},
{"id":34540,"serving_calories":158.86,"serving_carbs":23.37,"serving_fats":4.29,"serving_proteins":8.51},
{"id":34523,"serving_calories":214.32,"serving_carbs":12.01,"serving_fats":13.68,"serving_proteins":14.16},
{"id":34546,"serving_calories":257.98,"serving_carbs":23.03,"serving_fats":12.04,"serving_proteins":16.01},
{"id":34541,"serving_calories":276.11,"serving_carbs":8.89,"serving_fats":16.14,"serving_proteins":22.76},
{"id":34542,"serving_calories":259.44,"serving_carbs":62.27,"serving_fats":1.25,"serving_proteins":6.17},
{"id":34552,"serving_calories":193.64,"serving_carbs":15.54,"serving_fats":15.07,"serving_proteins":3.74},
{"id":34553,"serving_calories":95.64,"serving_carbs":7.12,"serving_fats":7.08,"serving_proteins":3.3},
{"id":34554,"serving_calories":136,"serving_carbs":18.67,"serving_fats":4.75,"serving_proteins":6.29},
{"id":34555,"serving_calories":166.37,"serving_carbs":29.32,"serving_fats":5.28,"serving_proteins":2.73},
{"id":34567,"serving_calories":255.83,"serving_carbs":15.96,"serving_fats":5.94,"serving_proteins":35.3},
{"id":34566,"serving_calories":198.57,"serving_carbs":11.49,"serving_fats":6.09,"serving_proteins":25.3},
{"id":34572,"serving_calories":140.96,"serving_carbs":16.35,"serving_fats":0.9,"serving_proteins":17.8},
{"id":34573,"serving_calories":706.69,"serving_carbs":85.51,"serving_fats":25.4,"serving_proteins":38.96},
{"id":34574,"serving_calories":103.24,"serving_carbs":7.16,"serving_fats":4.81,"serving_proteins":8.49},
{"id":34571,"serving_calories":460.52,"serving_carbs":6.26,"serving_fats":22.07,"serving_proteins":57.63},
{"id":34576,"serving_calories":118.85,"serving_carbs":32.18,"serving_fats":3.33,"serving_proteins":8.18},
{"id":35246,"serving_calories":197.04,"serving_carbs":1.91,"serving_fats":10.23,"serving_proteins":24.7},
{"id":35465,"serving_calories":221.95,"serving_carbs":35.28,"serving_fats":4.95,"serving_proteins":10.15},
{"id":39383,"serving_calories":295,"serving_carbs":53.55,"serving_fats":3.81,"serving_proteins":16.31},
]