832401102_ZhaShi_First Assignment——Front-End and Back-End Separated Calculator System

ZhaShi832401102 ZhaShi832401102 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

1. Basic Information

ItemContent
CourseSoftware Engineering Practice
AssignmentAssignment 1
ProjectFront-End and Back-End Separated Web Calculator
Main TechnologiesJavaScript, Vite, FastAPI, SQLite, Render
Development ModelFront-end / Back-end Separation

The goal of this assignment is to develop a complete Web calculator based on a front-end and back-end separated architecture.

The front end is responsible for user interaction, expression input, result display, and calculation-history display. The back end is responsible for expression validation, mathematical calculation, exception handling, and database persistence.

The front end communicates with the back end through RESTful APIs.

One important design principle of this project is that the actual calculation is performed on the server side rather than directly in the browser.


2. Project Links

2.1 Front-End Repository

https://github.com/Victor32-max/software-engineering-homework-frontend

2.2 Back-End Repository

https://github.com/Victor32-max/software-engineering-homework-backend

2.3 Online Front-End

https://software-engineering-homework-frontend.onrender.com

2.4 Online Back-End

https://software-engineering-homework-backend.onrender.com

2.5 Swagger API Documentation

https://software-engineering-homework-backend.onrender.com/docs

2.6 Code Style

Front-end code style:

https://github.com/Victor32-max/software-engineering-homework-frontend/blob/main/codestyle.md

Back-end code style:

https://github.com/Victor32-max/software-engineering-homework-backend/blob/main/codestyle.md

3. Table of Contents

  1. Basic Information
  2. Project Links
  3. Table of Contents
  4. PSP Table
  5. Final Product Demonstration
  6. Requirement Analysis
  7. Overall System Design
  8. Functional Structure
  9. Front-End Design
  10. Back-End Design
  11. REST API Design
  12. Database Design
  13. Expression Evaluation Design
  14. Calculation History
  15. Error Handling
  16. Front-End and Back-End Communication
  17. Deployment
  18. Key Code Explanation
  19. Testing
  20. Problems Encountered and Solutions
  21. Summary and Reflection

4. PSP Table

The PSP table records both the estimated time and the actual development time for each stage.

PSP StageEstimated Time / minActual Time / min
Requirement Analysis2020
System Design3030
Front-End Development6060
Back-End Development6060
Expression Evaluation4045
Database Design2030
History Module3025
Front-End / Back-End Integration4035
Testing and Debugging4045
GitHub Repository Preparation2530
Deployment4040
Blog Writing6060
Total465480

5. Final Product Demonstration

The final system provides a complete Web calculator interface with arithmetic calculation, decimal numbers, parentheses, negative numbers, error handling, persistent calculation history, history reuse, and deletion.

5.1 Main Interface

The main page contains two major areas.

The left side is the calculator, including the expression input field, result display, number buttons, operators, parentheses, clear button, backspace button, and equal button.

The right side displays the calculation history.


 

5.2 Addition

Input:

1+2

Expected result:

3


 

5.3 Subtraction and Negative Result

Input:

1-4

Result:

-3

 


 

5.4 Multiplication

Input: 

3*2

Result: 

6


 

5.5 Division

Input:

10/2

Result:

5


 

5.6 Decimal Calculation

Input:

1.2+3.5

Result:

4.7


 

5.7 Parentheses and Compound Expression

Input:

(1+2)*3

Result:

9

 

This test verifies both parentheses and operator precedence.


5.8 Division-by-Zero Error

Input:

1/0

The system displays:

不能除以 0

 

The application does not crash when division by zero occurs. Instead, the back end returns an error message and the front end displays it to the user.


5.9 Invalid Expression

Input:

1+++

The system displays:

表达式格式错误

 

This demonstrates that invalid expressions are detected on the server side.


5.10 Calculation History

Every successful calculation is stored in the back-end database.

Each history record contains:

Expression
Result
Created time

 

After refreshing the browser, the historical records are still available. This demonstrates that the records are persistently stored in SQLite rather than only being stored in the browser memory.


5.11 Reusing a Historical Expression

Each historical record contains a “Reuse” button.

When the user clicks it, the expression is automatically copied back into the calculator input field.

 

This is an additional usability feature implemented in the project.


5.12 Deleting History Records

Each historical record also contains a delete button.

When the user deletes a record, the front end sends a request to the back end. The corresponding record is removed from the SQLite database, and the history list is refreshed.


 

5.13 Swagger API Documentation

FastAPI automatically provides Swagger documentation.

The deployed API documentation can be accessed at:

https://software-engineering-homework-backend.onrender.com/docs


 

5.14 GitHub Repositories and Deployment


6. Requirement Analysis

The project contains four major functional requirements.

The first requirement is arithmetic calculation.

The calculator should support:

+
-
*
/

It should also support:

  • decimal numbers;
  • parentheses;
  • negative numbers;
  • compound expressions;
  • standard operator precedence.

The second requirement is error handling.

The application should correctly handle situations such as:

Division by zero
Invalid expression
Empty expression
Unsupported expression

The third requirement is persistent calculation history.

After every successful calculation, the back end stores:

id
expression
result
created_at

The fourth requirement is history management.

The user should be able to:

  • query historical records;
  • reuse a previous expression;
  • delete a specified record.

The core calculation must be performed by the back end.


7. Overall System Design

The project adopts a front-end and back-end separated architecture.

                Web Calculator
                      |
          +-----------+-----------+
          |                       |
       Frontend                 Backend
       Vite/JS                  FastAPI
          |                       |
          |      HTTP/JSON        |
          +---------------------->|
                                  |
                         Expression Parser
                                  |
                         Calculation Logic
                                  |
                              SQLite

The main data flow is:

User inputs expression
        ↓
Front-end JavaScript
        ↓
POST /api/calculate
        ↓
FastAPI receives expression
        ↓
Expression validation
        ↓
AST parsing
        ↓
Server-side calculation
        ↓
Save result into SQLite
        ↓
Return JSON response
        ↓
Display result in browser

This architecture clearly separates presentation logic from business logic.


8. Functional Structure

Web Calculator
│
├── Calculator
│   ├── Addition
│   ├── Subtraction
│   ├── Multiplication
│   ├── Division
│   ├── Decimal Calculation
│   ├── Parentheses
│   ├── Positive / Negative Numbers
│   └── Error Handling
│
├── Calculation History
│   ├── Save History
│   ├── Query History
│   ├── Reuse Expression
│   └── Delete History
│
├── Frontend
│   ├── Calculator Interface
│   ├── Button Interaction
│   ├── Expression Input
│   ├── API Request
│   ├── Result Display
│   └── History Display
│
└── Backend
    ├── REST API
    ├── Input Validation
    ├── AST Expression Parsing
    ├── Calculation Logic
    ├── Exception Handling
    └── SQLite Database

9. Front-End Design

The front end is implemented with:

HTML
CSS
JavaScript
Vite

The interface is divided into two main sections.

The calculator section includes:

Expression input
Result display
Number buttons
Arithmetic operators
Parentheses
AC
Backspace
Equal button

The history section includes:

Expression
Result
Time
Reuse button
Delete button

The front end does not calculate the final mathematical result independently.

Instead, it sends the expression to the back-end API.


10. Back-End Design

The back end is implemented with:

Python
FastAPI
SQLite

Its responsibilities include:

  • receiving expressions from the front end;
  • validating user input;
  • parsing the mathematical expression;
  • performing arithmetic calculations;
  • detecting errors;
  • writing successful calculations into SQLite;
  • querying calculation history;
  • deleting calculation records;
  • returning JSON responses.

FastAPI was selected because it provides a simple REST API development model and automatically generates Swagger documentation.


11. REST API Design

The system provides three main business APIs.

HTTP MethodEndpointFunction
POST/api/calculateCalculate an expression and save the result
GET/api/historyGet calculation history
DELETE/api/history/{history_id}Delete a history record

There is also a basic testing endpoint:

HTTP MethodEndpointFunction
GET/Check whether the back end is running

Example request:

{
  "expression": "(1+2)*3"
}

Example response:

{
  "id": 1,
  "expression": "(1+2)*3",
  "result": 9,
  "created_at": "2026-10-07 15:25:39"
}

12. Database Design

SQLite is used as the database.

The main table is:

history
--------------------------------
id          INTEGER PRIMARY KEY
expression  TEXT
result      TEXT
created_at  TEXT

The fields have the following meanings:

  • id: unique identifier of the record;
  • expression: the expression submitted by the user;
  • result: the calculation result;
  • created_at: the time when the calculation was completed.

The table is initialized automatically when the application starts.

CREATE TABLE IF NOT EXISTS history

Therefore, no manual database initialization is required before the first run.


13. Expression Evaluation Design

Expression evaluation is one of the most important parts of this project.

A direct implementation such as:

eval()

or:

exec()

was intentionally avoided.

Executing raw user input with eval() may create security risks because arbitrary Python expressions could potentially be executed.

Instead, this project uses Python's ast module.

parsed = ast.parse(expression, mode="eval")

The expression is first transformed into an Abstract Syntax Tree.

Only specific AST operators are allowed:

allowed_operators = {    ast.Add: operator.add,    ast.Sub: operator.sub,    ast.Mult: operator.mul,    ast.Div: operator.truediv,    ast.USub: operator.neg,    ast.UAdd: operator.pos,}

Therefore, expressions such as:

1+2*3
(1+2)*3
-5+8
3*-2

can be correctly evaluated.

At the same time, unsupported AST node types are rejected.

This approach provides better security than executing raw input directly.


14. Calculation History Module

After a calculation succeeds, the result is stored using a parameterized SQL statement.

cursor.execute(    """    INSERT INTO history    (expression, result, created_at)    VALUES (?, ?, ?)    """,    (expression, str(result), created_at))

Parameterized SQL is used instead of string concatenation.

The history API is:

GET /api/history

Records are returned in descending order of ID so that newer records appear first.

A specified record can be deleted through:

DELETE /api/history/{history_id}

After deletion, the front end reloads the history data.


15. Error Handling

Several error conditions are handled by the application.

15.1 Empty Expression

If no expression is entered, the system returns an error message.

表达式不能为空

15.2 Division by Zero

Before performing a division operation, the back end checks whether the denominator is zero.

if operator_type == ast.Div and right == 0:    raise ZeroDivisionError("不能除以 0")

The front end then displays:

不能除以 0

15.3 Invalid Expression

For example:

1+++

The parser rejects the expression and returns:

表达式格式错误

15.4 Unsupported AST Node

Any AST node outside the allowed set is rejected instead of being executed.


16. Front-End and Back-End Communication

Consider the expression:

(1+2)*3

The complete process is:

① User inputs (1+2)*3
          ↓
② JavaScript reads the expression
          ↓
③ POST /api/calculate
          ↓
④ FastAPI receives JSON
          ↓
⑤ AST parses the expression
          ↓
⑥ Server calculates the result: 9
          ↓
⑦ Result is stored in SQLite
          ↓
⑧ Back end returns JSON
          ↓
⑨ Front end displays 9
          ↓
⑩ GET /api/history
          ↓
⑪ History list is refreshed

If the back-end service is unavailable, the front end can still display the calculator interface, but a new calculation cannot be completed.

This confirms that the core calculation logic is located on the server side.


17. Deployment

The entire project is deployed on Render.

17.1 Back-End Deployment

The FastAPI back end is deployed as a Web Service.

The dependency file is:

requirements.txt

Its main content is:

fastapi
uvicorn

The start command is:

uvicorn main:app --host 0.0.0.0 --port $PORT

The deployed back-end address is:

https://software-engineering-homework-backend.onrender.com

17.2 Front-End Deployment

The front end is deployed as a Render Static Site.

Build command:

npm install && npm run build

Publish directory:

dist

The deployed front-end address is:

https://software-engineering-homework-frontend.onrender.com

The front-end API base URL was changed from the local development address:

http://127.0.0.1:8000

to the deployed back-end address:

https://software-engineering-homework-backend.onrender.com

CORS was also configured on the FastAPI server so that the deployed front end can communicate with the deployed back end.


18. Key Code Explanation

18.1 Front-End API Request

The front end sends the expression to the back end through fetch().

const response = await fetch(
  `${API_BASE}/api/calculate`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      expression: expression
    })
  }
)

The front end only submits the expression.

It does not calculate the mathematical result itself.


18.2 Back-End Calculation API

@app.post("/api/calculate")def calculate(request: CalculateRequest):

The main workflow is:

Receive expression
→ Validate expression
→ Evaluate expression
→ Handle errors
→ Save history
→ Return result

18.3 AST-Based Expression Parsing

Only selected AST elements are accepted.

Add
Sub
Mult
Div
USub
UAdd
Constant

This avoids direct execution of arbitrary user input.


18.4 History Query

The query used to obtain the historical records is:

SELECT    id,    expression,    result,    created_atFROM historyORDER BY id DESC

This causes newer calculation records to appear first.


19. Testing

The following functional tests were performed.

TestInputExpected ResultActual Result
Addition1+23Passed
Subtraction1-4-3Passed
Multiplication13*00Passed
Division10/25Passed
Decimal1.2+3.54.7Passed
Operator precedence1+2*37Passed
Parentheses(1+2)*39Passed
Unary negative3*-2-6Passed
Division by zero1/0Error messagePassed
Invalid expression1+++Error messagePassed
Save historySuccessful calculationSaved to databasePassed
Refresh pageRefresh browserHistory remainsPassed
Delete historyDelete one recordRecord disappearsPassed
Reuse expressionClick reuseExpression is restoredPassed

20. Problems Encountered and Solutions

20.1 CORS Error

At the beginning of development, the front end was running at:

http://localhost:5173

while the back end was running at:

http://127.0.0.1:8000

The browser displayed an error similar to:

blocked by CORS policy

Although both services were running on the same computer, they were considered different origins.

The problem was solved using FastAPI's:

CORSMiddleware

This issue helped me better understand browser same-origin policies and why CORS configuration is necessary for separated front-end and back-end applications.


20.2 Git User Identity Was Not Configured

When I first attempted to commit the project, Git displayed:

Author identity unknown

The reason was that user.name and user.email had not yet been configured on the computer.

After configuring Git identity information, the local commit was completed successfully.


20.3 GitHub HTTPS Connection Problem

During the GitHub upload process, Git reported:

Failed to connect to github.com port 443

The browser could access GitHub normally, but Git command-line HTTPS access was unstable.

I checked the network connection, HTTPS settings, and GitHub authentication.

To ensure that the assignment could be submitted on time, I finally uploaded the project files through the GitHub Web interface.

Through this process, I became familiar with the basic workflow of:

git init
git add
git commit
git remote
git push

as well as GitHub authentication.


20.4 Deployment API Address Problem

After the front end was first deployed, the page displayed:

Failed to fetch

The reason was that the GitHub version of the front end was still using:

http://127.0.0.1:8000

as its back-end address.

This works only when the back-end service is running on the user's own computer.

After deployment, the front end must instead call the public Render back-end service.

Therefore, the API base URL was changed to:

https://software-engineering-homework-backend.onrender.com

After the front end was redeployed, the online application worked correctly.

This problem helped me understand the difference between local development environments and production deployment environments.


21. Summary and Reflection

Before completing this assignment, my understanding of front-end and back-end separation was mainly conceptual.

Through this project, I completed a relatively complete development workflow:

Requirement Analysis
→ System Design
→ Front-End Development
→ Back-End Development
→ REST API Design
→ Database Persistence
→ Integration
→ Debugging
→ GitHub
→ Cloud Deployment

The most important thing I learned was how different parts of a Web application cooperate with each other.

First, I gained a clearer understanding of the responsibility boundary between the front end and the back end. The front end mainly handles presentation and user interaction, while the back end performs the main business logic.

Second, I learned how REST APIs can be used to exchange data between two independent applications.

Third, I learned how to use SQLite to persist calculation records instead of storing data only in browser memory.

Fourth, I used an AST-based solution to safely parse mathematical expressions instead of directly calling eval().

Fifth, I encountered and solved several practical engineering problems, including CORS, Git identity configuration, GitHub authentication, network connectivity, local-to-production API migration, and Render deployment.

These problems were as valuable as implementing the calculator itself because they provided practical experience with a complete software-development process.

There are still several possible improvements for this project in the future:

Scientific calculation
History search
Clear-all-history function
Dark mode
Improved mobile responsiveness
PostgreSQL database
Environment-variable-based API configuration
Automated testing

Overall, this assignment gave me experience not only in writing code, but also in turning separate front-end, back-end, database, version-control, and deployment components into a complete Web application that can actually be accessed through the Internet.

...全文

相关推荐

基于MPC+二自由度动力学的车辆轨迹跟踪+横向控制Carsim和Simulink联合仿真(Matlab代码、Simulink仿真实现)

内容概要:本文系统阐述了基于模型预测控制(MPC)与二自由度车辆动力学模型的轨迹跟踪与横向控制方法,通过Carsim与Simulink联合仿真平台实现了Matlab代码与Simulink模型的协同验证。该方法结合MPC算法的滚动时域优化特性与车辆二自由度动力学模型的运动学精度,构建了高精度的路径跟踪控制系统,能够有效提升自动驾驶车辆在复杂工况下的行驶稳定性与轨迹跟随精度。文中详细介绍了控制策略设计、车辆动力学建模、仿真参数配置、联合仿真接口搭建及结果分析全过程,涵盖了状态预测、代价函数构建、约束处理与优化求解等核心环节,适用于智能驾驶中路径规划与跟踪控制系统的研发与验证。; 适合人群:具备车辆动力学、现代控制理论(如最优控制、预测控制)基础知识,熟练掌握Matlab/Simulink与Carsim仿真工具,从事自动驾驶、智能车辆控制算法开发的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于智能网联汽车与无人驾驶系统中横向控制算法的设计与性能验证;②作为MPC在车辆运动控制中应用的教学案例,辅助高校课程实践与科研训练;③支撑高水平学术论文复现、课题申报与工程原型开发。; 阅读建议:建议读者在Carsim与Simulink联合仿真环境下动手复现,重点掌握MPC控制器中预测模型的建立、权重系数调节、约束设定及实时性优化等关键技术,并尝试在不同道路曲率、车速及路面附着条件下进行鲁棒性测试,进一步拓展至非线性MPC或自适应MPC等先进控制策略的研究。

荔枝科研社

基于线性时变模型预测控制的车辆轨迹跟踪系统研究(Matlab代码、Simulink仿真实现)

内容概要:本文系统研究了基于线性时变模型预测控制(LTV-MPC)的车辆轨迹跟踪系统,利用Matlab与Simulink工具搭建完整的控制系统仿真模型。研究首先建立车辆动力学模型,并通过局部线性化方法将非线性系统转化为时变状态空间模型,进而构建包含状态预测、滚动优化与反馈校正的MPC控制框架。文中详细阐述了目标函数设计、约束条件处理(如输入饱和、状态边界)、预测时域与控制时域设定等关键技术环节,重点分析LTV-MPC在不同行驶工况下对参考轨迹的跟踪精度、稳定性和实时性表现。通过与传统线性MPC的对比仿真,验证了LTV-MPC在应对系统非线性、提升轨迹跟踪性能方面的显著优势,充分展现了其在自动驾驶路径跟踪中的工程应用价值。; 适合人群:具备自动控制理论、车辆动力学及优化算法基础,熟练掌握Matlab/Simulink编程环境,从事智能驾驶决策控制、路径规划、先进驾驶辅助系统(ADAS)研发的科研人员、工程技术人员及研究生。; 使用场景及目标:①掌握车辆轨迹跟踪中MPC控制器的设计与实现方法;②学习如何将非线性车辆模型在线线性化并集成到预测控制框架中;③深入理解LTV-MPC相较于固定参数MPC的性能优势与适用边界;④通过仿真调试优化权重矩阵、预测时域等关键参数,提升实际控制效果;⑤为自动驾驶系统的控制模块开发、学术论文撰写或毕业课题提供可复现的技术方案与仿真平台。; 阅读建议:建议读者结合所提供的Matlab代码与Simulink模型,逐步运行并剖析各功能模块,重点关注车辆模型线性化过程、状态预测模块构建、QP求解器配置及约束处理机制,通过调整工况和控制参数进行对比实验,深入掌握LTV-MPC的调控机理与性能优化方法。

程序猿鑫

基于扩展卡尔曼滤波(EKF)的激光雷达与雷达异构传感器融合算法研究(Matlab代码实现)

内容概要:本文系统性解读了一套完整的多机器人路径规划(MAPF)MATLAB代码库,聚焦于优先级规划算法的工程实现,提出将求解过程划分为几何解析、拓扑建模、调度优化与可视化呈现四个解耦层次的模块化框架。文章深入阐述了动态边权膨胀、节点预留历史、几何惩罚驱动的局部同步机制、Petri网双阶段优化以及双坐标系统可视化等核心技术设计,实现了空间路径规划与时间冲突消解的有效分离,在保障多项式时间复杂度的前提下显著提升了路径规划的成功率与计算效率。该框架不仅具备良好的可复现性和工程扩展性,还为MAPF领域的算法研究、性能评估与教学实践提供了系统化的参考范例。; 适合人群:具备一定MATLAB编程基础,从事机器人路径规划、智能交通、自动化控制、多智能体系统等相关领域的科研人员、工程技术人员及研究生。; 使用场景及目标:① 深入理解并复现多智能体路径规划中优先级规划与冲突消解的核心机制;② 学习如何将复杂的MAPF问题分解为几何、拓扑、调度与呈现的模块化工程实现方法;③ 借鉴动态边权惩罚、Petri网建模、局部同步优化等创新设计思路,以提升自身路径规划算法的鲁棒性与效率。; 阅读建议:建议读者结合文中提供的MATLAB代码与MovingAI标准地图数据集,严格按照章节顺序逐步实现各模块功能,并通过内置的动画演示工具直观观察算法执行过程,重点关注各模块间的接口设计、关键参数(如惩罚权重、同步阈值)的调优策略及其对整体性能的影响。

稷下科研社

【脉冲多普勒雷达信号处理】基于匹配滤波与慢时间傅里叶变换的距离速度联合估计理论及模糊特性研究(Matlab代码实现)

内容概要:本文系统性解读了一套完整的多机器人路径规划(MAPF)MATLAB代码库,重点围绕优先级规划算法展开,提出将求解过程划分为几何、拓扑、调度与呈现四个解耦层次的框架设计。该框架采用动态边权膨胀策略提升路径灵活性,利用节点预留历史实现高效冲突查询,并通过几何惩罚驱动的局部同步机制优化时间消解效率。此外,代码库还引入Petri网整数规划作为对比路径,支持双坐标系统与全流程可视化,具备良好的可复现性与可扩展性,适用于教学与科研参考。; 适合人群:具备一定MATLAB编程基础,从事机器人路径规划、智能调度或自动化系统研究的科研人员及研究生。; 使用场景及目标:①学习多机器人路径规划中优先级规划的核心思想与工程实现;②掌握动态边权膨胀、时间同步与冲突消解等关键技术的设计逻辑;③复现并改进现有算法,用于仓储物流、无人机编队等实际应用场景的研究与仿真验证。; 阅读建议:建议按文中所述的数据流顺序逐步阅读各模块内容,重点关注各层之间的接口设计与信息传递机制,结合提供的可视化工具调试与观察算法行为,以深入理解框架的整体架构与关键创新点。

荔枝科研社

2026 年MathorCup 数学应用挑战赛A题-啤酒酿造化合物分析与啤酒风味预测

内容概要:本文档是2026年MathorCup数学应用挑战赛A题“啤酒酿造化合物分析与啤酒风味预测”的相关资料汇总,聚焦于啤酒酿造过程中关键化学成分的识别及其对最终风味的影响,开展系统的数据分析与建模研究。文档虽未提供完整解题过程,但通过列举多源数据融合、信号处理、机器学习预测模型等多种技术方法与仿真案例,揭示了该问题潜在的解决路径,涵盖化合物数据的预处理与特征提取、关键风味物质的关联性挖掘,以及基于先进算法的风味预测模型构建等内容,体现了从化学成分到感官体验的跨学科研究范式。; 适合人群:具备数据分析、统计建模或机器学习基础知识,对食品科学、生物工程、化学工程等领域有浓厚兴趣,且有意参与数学建模竞赛的本科生、研究生及科研人员。; 使用场景及目标:①应用于数学建模竞赛,对啤酒酿造工艺中的化学成分与感官评价数据进行关联性分析;②构建从原料及发酵产物到成品啤酒风味的量化预测模型,旨在实现风味的精准评估与酿造工艺的科学优化。; 阅读建议:此资源侧重于提供解题思路与技术工具的指引,使用者应结合比赛提供的具体数据集,参考文档中提及的算法(如PCA、PLS回归、随机森林、神经网络等)进行模型的构建、训练与验证,并重点关注数据清洗、特征工程、模型选择及可解释性分析等关键环节。

然哥依旧
评论
收藏 已收藏
分享
返回顶部