Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -704,6 +704,10 @@ def nutri_call():
|
|
704 |
|
705 |
|
706 |
|
|
|
|
|
|
|
|
|
707 |
|
708 |
|
709 |
|
@@ -711,8 +715,7 @@ def nutri_call():
|
|
711 |
|
712 |
from tabulate import tabulate
|
713 |
import numpy as np
|
714 |
-
|
715 |
-
|
716 |
|
717 |
# Глобальные параметры
|
718 |
TOTAL_NITROGEN = 120.0 # Общее количество азота
|
@@ -775,26 +778,14 @@ class NutrientCalculator:
|
|
775 |
# Формирование вектора B (целевые значения в ppm)
|
776 |
B = self.target_vector * self.volume / 1000 # Перевод ppm в граммы
|
777 |
|
778 |
-
#
|
779 |
-
|
780 |
-
|
781 |
-
# Добавляем допустимый перебор (до 10%)
|
782 |
-
tolerance = 0.10
|
783 |
-
B_max = B * (1 + tolerance) # Максимальные значения с учетом допуска
|
784 |
-
B_min = B * (1 - tolerance) # Минимальные значения с учетом допуска
|
785 |
-
|
786 |
-
# Решение системы уравнений с ограничениями
|
787 |
-
c = np.ones(len(fertilizer_names)) # Минимизируем сумму отклонений
|
788 |
-
result = linprog(c, A_ub=A, b_ub=B_max, A_eq=A, b_eq=B, bounds=bounds, method='highs')
|
789 |
-
|
790 |
-
if not result.success:
|
791 |
-
raise ValueError("Не удалось найти решение с текущими ограничениями.")
|
792 |
|
793 |
# Формирование результата
|
794 |
results = {}
|
795 |
for i, fert_name in enumerate(fertilizer_names):
|
796 |
-
if
|
797 |
-
results[fert_name] =
|
798 |
|
799 |
return results
|
800 |
|
@@ -815,20 +806,6 @@ class NutrientCalculator:
|
|
815 |
raise
|
816 |
|
817 |
|
818 |
-
if __name__ == "__main__":
|
819 |
-
try:
|
820 |
-
calculator = NutrientCalculator()
|
821 |
-
results = calculator.calculate()
|
822 |
-
if results:
|
823 |
-
print(calculator.generate_report(results))
|
824 |
-
else:
|
825 |
-
print("Решение не найдено.")
|
826 |
-
except Exception as e:
|
827 |
-
print(f"Критическая ошибка: {str(e)}")
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
|
833 |
@app.route('/calculation', methods=['POST'])
|
834 |
def handle_calculation():
|
|
|
704 |
|
705 |
|
706 |
|
707 |
+
|
708 |
+
|
709 |
+
|
710 |
+
|
711 |
|
712 |
|
713 |
|
|
|
715 |
|
716 |
from tabulate import tabulate
|
717 |
import numpy as np
|
718 |
+
import numpy as np
|
|
|
719 |
|
720 |
# Глобальные параметры
|
721 |
TOTAL_NITROGEN = 120.0 # Общее количество азота
|
|
|
778 |
# Формирование вектора B (целевые значения в ppm)
|
779 |
B = self.target_vector * self.volume / 1000 # Перевод ppm в граммы
|
780 |
|
781 |
+
# Решение системы уравнений A @ X = B
|
782 |
+
X, residuals, rank, s = np.linalg.lstsq(A, B, rcond=None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
783 |
|
784 |
# Формирование результата
|
785 |
results = {}
|
786 |
for i, fert_name in enumerate(fertilizer_names):
|
787 |
+
if X[i] > 0:
|
788 |
+
results[fert_name] = X[i]
|
789 |
|
790 |
return results
|
791 |
|
|
|
806 |
raise
|
807 |
|
808 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
809 |
|
810 |
@app.route('/calculation', methods=['POST'])
|
811 |
def handle_calculation():
|