from flask import Flask, render_template, request import HookJeeves import os import json app = Flask(__name__) app.config["UPLOAD_FOLDER"] = "uploads/" os.makedirs(app.config["UPLOAD_FOLDER"], exist_ok=True) def parse_uploaded_data(file): data = json.load(file) return data def to_str(arr): return ",".join(list(map(str, arr))) @app.route("/", methods=["GET", "POST"]) def index(): if request.method == "POST": if "datafile" in request.files and request.files["datafile"].filename != "": file = request.files["datafile"] data = parse_uploaded_data(file) else: try: data = { "x0": list(map(float, request.form["x0"].split(","))), "delta0": list(map(float, request.form["delta0"].split(","))), "epsilon": float(request.form["epsilon"]), "alpha": float(request.form["alpha"]), "target": request.form["target"], "x1c": list(map(float, request.form["x1c"].split(","))), "x2c": list(map(float, request.form["x2c"].split(","))), "x1r": list(map(float, request.form["x1r"].split(","))), "x2r": list(map(float, request.form["x2r"].split(","))), } except (KeyError, ValueError, json.JSONDecodeError): return render_template( "index.html", error="Ошибка в данных формы. Заполните все поля корректно.", ) # Инициализация функций c = [data["x1c"][::-1], data["x2c"][::-1]] x1r = data["x1r"] x2r = data["x2r"] target = data["target"] def f(x): return sum( [ sum([c[i][j] * x[i] ** j for j in range(len(c[i]))]) for i in range(len(c)) ] ) def fit(a, b): return a < b if target == "min" else a > b def r(x): return x1r[0] <= x[0] <= x1r[1] and x2r[0] <= x[1] <= x2r[1] # Запуск метода x, val, x_err = HookJeeves.hooke_jeeves( f, data["x0"], data["delta0"], data["epsilon"], data["alpha"], r=r, fit=fit ) return render_template( "index.html", result=True, log=HookJeeves.result_log, extreme={"x": x, "val": val, "x_err": x_err, "type": target}, form_data={ "x0": to_str(data["x0"]), "delta0": to_str(data["delta0"]), "epsilon": str(data["epsilon"]), "alpha": str(data["alpha"]), "target": data["target"], "x1c": to_str(data["x1c"]), "x2c": to_str(data["x2c"]), "x1r": to_str(data["x1r"]), "x2r": to_str(data["x2r"]), }, ) return render_template("index.html")