DmitrMakeev commited on
Commit
9031593
·
verified ·
1 Parent(s): d3ccad5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -10
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
- import numpy as np
 
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
- # Решение системы уравнений A @ X = B
779
- X, residuals, rank, s = np.linalg.lstsq(A, B, rcond=None)
 
 
 
 
 
 
 
 
 
780
 
781
  # Формирование результата
782
  results = {}
783
  for i, fert_name in enumerate(fertilizer_names):
784
- if X[i] > 0:
785
- results[fert_name] = X[i]
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