Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -699,11 +699,6 @@ def nutri_call():
|
|
699 |
|
700 |
|
701 |
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
|
708 |
|
709 |
|
@@ -712,7 +707,8 @@ def nutri_call():
|
|
712 |
|
713 |
from tabulate import tabulate
|
714 |
import numpy as np
|
715 |
-
|
|
|
716 |
|
717 |
# Глобальные параметры
|
718 |
TOTAL_NITROGEN = 120.0 # Общее количество азота
|
@@ -775,14 +771,23 @@ class NutrientCalculator:
|
|
775 |
# Формирование вектора B (целевые значения в ppm)
|
776 |
B = self.target_vector * self.volume / 1000 # Перевод ppm в граммы
|
777 |
|
778 |
-
#
|
779 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
780 |
|
781 |
# Формирование результата
|
782 |
results = {}
|
783 |
for i, fert_name in enumerate(fertilizer_names):
|
784 |
-
if
|
785 |
-
results[fert_name] =
|
786 |
|
787 |
return results
|
788 |
|
@@ -814,6 +819,17 @@ if __name__ == "__main__":
|
|
814 |
except Exception as e:
|
815 |
print(f"Критическая ошибка: {str(e)}")
|
816 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
817 |
|
818 |
|
819 |
|
|
|
699 |
|
700 |
|
701 |
|
|
|
|
|
|
|
|
|
|
|
702 |
|
703 |
|
704 |
|
|
|
707 |
|
708 |
from tabulate import tabulate
|
709 |
import numpy as np
|
710 |
+
from scipy.optimize import linprog
|
711 |
+
|
712 |
|
713 |
# Глобальные параметры
|
714 |
TOTAL_NITROGEN = 120.0 # Общее количество азота
|
|
|
771 |
# Формирование вектора B (целевые значения в ppm)
|
772 |
B = self.target_vector * self.volume / 1000 # Перевод ppm в граммы
|
773 |
|
774 |
+
# Ограничения: количество удобрений >= 0
|
775 |
+
bounds = [(0, None) for _ in fertilizer_names]
|
776 |
+
|
777 |
+
# Целевая функция: минимизировать сумму отклонений
|
778 |
+
c = np.ones(len(fertilizer_names))
|
779 |
+
|
780 |
+
# Решение системы уравнений с ограничениями
|
781 |
+
result = linprog(c, A_eq=A, b_eq=B, bounds=bounds, method='highs')
|
782 |
+
|
783 |
+
if not result.success:
|
784 |
+
raise ValueError("Не удалось найти решение с текущими ограничениями.")
|
785 |
|
786 |
# Формирование результата
|
787 |
results = {}
|
788 |
for i, fert_name in enumerate(fertilizer_names):
|
789 |
+
if result.x[i] > 0:
|
790 |
+
results[fert_name] = result.x[i]
|
791 |
|
792 |
return results
|
793 |
|
|
|
819 |
except Exception as e:
|
820 |
print(f"Критическая ошибка: {str(e)}")
|
821 |
|
822 |
+
if __name__ == "__main__":
|
823 |
+
try:
|
824 |
+
calculator = NutrientCalculator()
|
825 |
+
results = calculator.calculate()
|
826 |
+
if results:
|
827 |
+
print(calculator.generate_report(results))
|
828 |
+
else:
|
829 |
+
print("Решение не найдено.")
|
830 |
+
except Exception as e:
|
831 |
+
print(f"Критическая ошибка: {str(e)}")
|
832 |
+
|
833 |
|
834 |
|
835 |
|