clear all
close all
filename = 'products.xlsx';
sheet = 1;
data = readmatrix(filename, "Sheet", sheet, "Range", "A2:I21");
product_names = readcell(filename, "Sheet", sheet, "Range", "B2:B21");
cost = data(:,3);
mass = data(:,4);
calories = data(:,5);
proteins = data(:,6);
fats = data(:,7);
carbs = data(:,8);
max_cost = 9000;
min_calories = 2000;
max_calories = 2200;
n = length(cost);
f = -cost;
num_constraints = 6;
A = zeros(num_constraints, n);
A(1,:) = cost;
A(2,:) = -calories;
A(3,:) = calories;
A(4,:) = proteins*4 - 0.3*calories;
A(5,:) = fats*9 - 0.3*calories;
A(6,:) = carbs*4 - 0.4*calories;
b = zeros(num_constraints, 1);
b(1) = max_cost;
b(2) = -min_calories;
b(3) = max_calories;
b(4) = 0;
b(5) = 0;
b(6) = 0;
intcon = [];
lb = zeros(1, n);
ub = inf(1, n);
x, fval, exitflag = intlinprog(f,, A, b,,, lb, ub);
if exitflag > 0
total_cost = sum(cost.* x);
total_calories = sum(calories.* x);
total_proteins = sum(proteins.* x);
total_fats = sum(fats.* x);
total_carbs = sum(carbs.* x);
if total_calories == 0
total_calories = 1e-6;
end
fprintf('Оптимальный набор продуктов:\n');
for i = 1:n
if x(i) > 0
fprintf('Продукт %s: %.2f единиц\n', product_names{i}, x(i));
end
end
fprintf('\nРезультаты оптимизации:\n');
fprintf('Общая стоимость: %.2f руб\n', total_cost);
fprintf('Общая калорийность: %.2f кКал\n', total_calories);
fprintf('Белки: %.2f г (%.2f%% от калорийности)\n', total_proteins, total_proteins*4/total_calories*100);
fprintf('Жиры: %.2f г (%.2f%% от калорийности)\n', total_fats, total_fats*9/total_calories*100);
fprintf('Углеводы: %.2f г (%.2f%% от калорийности)\n', total_carbs, total_carbs*4/total_calories*100);
else
fprintf('Решение не найдено!\n');
end