DmitrMakeev commited on
Commit
53d6f1e
·
verified ·
1 Parent(s): 7aed5e9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -32
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
- from scipy.optimize import linprog
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
- # Ограничения: количество удобрений >= 0
779
- bounds = [(0, None) for _ in fertilizer_names]
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 result.x[i] > 0:
797
- results[fert_name] = result.x[i]
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():