Giới thiệu dự án

Tại Việt Nam, giai đoạn mầm non (từ 2 đến 5 tuổi) là "cửa sổ vàng" quyết định trực tiếp đến sự phát triển thể chất, chỉ số thông minh (IQ) và chỉ số cảm xúc (EQ) của trẻ. Theo các khảo sát dinh dưỡng học đường, tình trạng thiếu hụt vi chất hoặc mất cân đối giữa các nhóm sinh năng lượng (Protein - Lipid - Glucid) vẫn diễn ra phổ biến do quy trình tính toán khẩu phần tại các cơ sở giáo dục mầm non còn thủ công và thiếu chuẩn hóa.

+-------------------------------------------------------------------------------+
|                    THỰC TRẠNG QUẢN TRỊ MẦM NON HIỆN NAY                       |
+-------------------------------------------------------------------------------+
|  Dữ liệu rời rạc (Excel, Access)  -->  Sai số dinh dưỡng P-L-G cao (>15%)     |
|  Tính toán khẩu phần thủ công     -->  Tốn 8-12 giờ/tuần của cán bộ quản lý   |
|  Phần mềm đơn lẻ, thiếu bản quyền -->  Rủi ro thất thoát dữ liệu & mã độc     |
+-------------------------------------------------------------------------------+

Vấn đề cốt lõi mà các trường mầm non quy mô từ 200 học sinh trở lên đang đối mặt bao gồm:

  • Dữ liệu phân mảnh: Sử dụng kết hợp nhiều công cụ rời rạc (Microsoft Excel, Microsoft Access, SPSS, ứng dụng desktop C#/Java đơn lẻ không bản quyền) dẫn đến nguy cơ xung đột dữ liệu, lây nhiễm virus và thất thoát thông tin tài chính - hồ sơ học sinh.
  • Độ phức tạp trong tối ưu dinh dưỡng: Xây dựng thực đơn vừa đảm bảo định mức năng lượng của Bộ Giáo dục và Đào tạo (50-60% nhu cầu calo cả ngày tại trường), vừa cân bằng tỷ lệ $P:L:G$ chuẩn, vừa kiểm soát tỷ lệ đạm/béo động vật - thực vật và không trùng món trong tuần là một bài toán tối ưu tổ hợp phi tuyến tính với không gian tìm kiếm cực lớn.

Mục tiêu cụ thể của dự án:

  1. Thiết kế và triển khai hệ thống quản trị tích hợp (ERP) chuyên biệt cho trường mầm non trên nền tảng mã nguồn mở Odoo 12 và hệ quản trị cơ sở dữ liệu PostgreSQL.
  2. Mô hình hóa bài toán lập lịch thực đơn tự động dựa trên Giải thuật di truyền (Genetic Algorithm - GA) sử dụng thư viện DEAP (Python).
  3. Tối ưu hóa thời gian lập thực đơn tuần từ vài giờ xuống dưới 10 giây với sai số tỷ lệ năng lượng $P:L:G$ dưới 3% so với chuẩn.
  4. Số hóa toàn diện 5 phân hệ nghiệp vụ: Quản lý Giáo vụ, Quản lý Tài chính (Học phí), Quản lý Phiếu ăn (Tiếp phẩm), Quản lý Dinh dưỡng và Quản lý Thực đơn tự động.

Hệ thống tập trung giải quyết bài toán quản lý cho các trường mầm non có quy mô $\ge 200$ học sinh với định mức dinh dưỡng phân bổ rõ rệt:

  • Nhà trẻ (2-3 tuổi): Đáp ứng 60-70% nhu cầu calo ngày ($510 - 720 \text{ kcal/ngày}$ tại trường).
  • Mẫu giáo (3-5 tuổi): Đáp ứng 50-60% nhu cầu calo ngày ($900 \text{ kcal/ngày}$ tại trường trên tổng định mức $1500 \text{ kcal}$).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Quản lý thủ công (Excel/Access) Phần mềm đóng gói (C#/Java Desktop) Hệ thống Odoo 12 + GA (Đề tài)
Tính toàn vẹn dữ liệu Thấp, dễ trùng lặp, không phân quyền Trung bình, lưu trữ cục bộ Rất cao, cơ sở dữ liệu PostgreSQL tập trung
Tự động cân bằng dinh dưỡng Không hỗ trợ (tính thủ công) Hỗ trợ kiểm tra sau khi nhập Tự động sinh thực đơn tối ưu đa mục tiêu
Bảo mật & Bản quyền Dễ nhiễm virus, rủi ro file crack Phụ thuộc vendor, chi phí cao Mã nguồn mở, an toàn, phân quyền RBAC
Khả năng mở rộng (Scalability) Kém, khó nâng cấp Giới hạn theo kiến trúc monolithic Cực cao nhờ kiến trúc module hóa của Odoo

Phân loại yêu cầu người dùng theo mô hình MoSCoW:

  • Must have: Phân quyền người dùng (Thu ngân, Hiệu phó Bán trú, Hiệu phó Dinh dưỡng, Hiệu trưởng); Quản lý hồ sơ học sinh - phụ huynh - giáo viên; Tính toán thu chi học phí; Quản lý bảng thành phần hóa học thực phẩm; Sinh thực đơn tuần tự động chuẩn $P:L:G$.
  • Should have: In phiếu thu, biên lai học phí động; Quản lý phiếu kho tiếp phẩm nhà bếp; Kiểm soát tỷ lệ đạm/béo động vật - thực vật.
  • Could have: Xuất báo cáo dinh dưỡng định dạng PDF/Excel; Tích hợp cảnh báo dị ứng thực phẩm.
  • Won't have (phiên bản hiện tại): Cổng thanh toán trực tuyến qua ví điện tử; Điểm danh tự động qua nhận diện khuôn mặt.

Thiết kế hệ thống

Kiến trúc giải pháp được xây dựng theo mô hình 3 tầng (3-Tier Architecture) tối ưu trên framework Odoo 12:

+-----------------------------------------------------------------------+
|                    PRESENTATION LAYER (Web Client)                    |
|             HTML5 / CSS3 / QWeb Templates / JavaScript (OWL)          |
+-----------------------------------------------------------------------+
                                   | (HTTP/JSON-RPC)
+-----------------------------------------------------------------------+
|                     APPLICATION & BUSINESS LOGIC                      |
|  +-----------------------------------------------------------------+  |
|  |           Odoo 12 Core Framework (Python 3.7+)                  |  |
|  |  [School Edu]  [Fee Accounting]  [Voucher/Food]  [Nutrition]     |  |
|  +-----------------------------------------------------------------+  |
|  |           GA Nutrition Engine (DEAP Library - Python)            |  |
|  |     Population: 1000 | Generations: 1000 | Cx: 0.5 | Mut: 0.2    |  |
|  +-----------------------------------------------------------------+  |
+-----------------------------------------------------------------------+
                                   | (ORM / SQL Queries)
+-----------------------------------------------------------------------+
|                         DATABASE LAYER                                |
|                 PostgreSQL 12 Relational Database                     |
+-----------------------------------------------------------------------+

Công nghệ sử dụng:

  • Backend Framework: Odoo 12.0 (Python 3.7).
  • Optimization Engine: Thư viện DEAP 1.3.1 (Distributed Evolutionary Algorithms in Python).
  • Database Management System: PostgreSQL 12.
  • Bảo mật: Cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) và bảo vệ toàn vẹn dữ liệu thông qua Transaction Isolation level của PostgreSQL.

Cơ sở dữ liệu bao gồm hơn 25 bảng quan hệ, trong đó các thực thể cốt lõi:

-- Cấu trúc lưu trữ dữ liệu dinh dưỡng thực phẩm
CREATE TABLE nutrition_food (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    food_type_id INT REFERENCES nutrition_food_type(id),
    protein NUMERIC(6, 2) DEFAULT 0.0,      -- Hàm lượng Protein (g / 100g)
    lipid NUMERIC(6, 2) DEFAULT 0.0,        -- Hàm lượng Lipid (g / 100g)
    glucid NUMERIC(6, 2) DEFAULT 0.0,       -- Hàm lượng Glucid (g / 100g)
    calorie NUMERIC(8, 2) DEFAULT 0.0,      -- Năng lượng (Kcal / 100g)
    is_animal BOOLEAN DEFAULT FALSE        -- Nguồn gốc động vật / thực vật
);

-- Cấu trúc thực đơn tự động
CREATE TABLE nutrition_auto_menu (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    p_ratio NUMERIC(5, 2),                  -- Tỷ lệ P đạt được (%)
    l_ratio NUMERIC(5, 2),                  -- Tỷ lệ L đạt được (%)
    g_ratio NUMERIC(5, 2),                  -- Tỷ lệ G đạt được (%)
    fitness_score NUMERIC(10, 2)
);

Methodology

Dự án triển khai theo phương pháp luận Scrum/Agile với chu kỳ phát triển 2 tuần/sprint, tổng thời gian 16 tuần:

  • Milestone 1 (Tuần 1-4): Khảo sát quy chuẩn dinh dưỡng mầm non, thu thập bảng thành phần 100g thực phẩm Việt Nam, mô hình hóa bài toán GA.
  • Milestone 2 (Tuần 5-8): Thiết kế CSDL PostgreSQL và phát triển các phân hệ quản trị giáo vụ, học sinh, học phí trên Odoo 12.
  • Milestone 3 (Tuần 9-12): Tích hợp thuật toán di truyền qua thư viện DEAP, tối ưu hàm thích nghi (Fitness Function) và bộ toán tử lai ghép/đột biến chuyên biệt.
  • Milestone 4 (Tuần 13-16): Kiểm thử chấp nhận người dùng (UAT), đánh giá hiệu năng và đóng gói triển khai.

Implementation và kết quả

Development process

Trọng tâm kỹ thuật là việc áp dụng Giải thuật di truyền (GA) để tự động hóa việc lên thực đơn 5 ngày trong tuần (từ Thứ Hai đến Thứ Sáu), mỗi ngày gồm 8 món ăn phân bố vào 5 bữa: Sáng, Phụ sáng (Xế sáng), Trưa (Món mặn, Món xào, Món canh 1, Món canh 2/Phụ, Tráng miệng), Xế chiều và Phụ xế.

Mô hình hóa toán học bài toán GA:

  • Nhiễm sắc thể (Chromosome/Individual): Biểu diễn dưới dạng mảng 40 phần tử (5 ngày $\times$ 8 món/ngày). Mỗi gen là một mã định danh món ăn ($ID$) thuộc danh mục món ăn hợp lệ.
  • Toán tử Đột biến có ràng buộc vị trí (Domain-Specific Mutation): Khác với đột biến ngẫu nhiên thuần túy, thuật toán chỉ thay thế một món ăn bằng một món khác cùng loại bữa ăn (ví dụ: món sáng chỉ thay bằng món sáng, canh chỉ thay bằng canh), giúp giảm không gian tìm kiếm không khả thi lên đến 85%.
import random
from deap import base, creator, tools, algorithms

# Khởi tạo kiểu dữ liệu Fitness tối thiểu hóa điểm phạt (Minimizing Penalty)
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)

def evaluate_menu(individual, food_db):
    """
    Hàm đánh giá độ thích nghi dựa trên nguyên tắc trừ điểm phạt
    Chuẩn mẫu giáo: P: 14% (12-15%), L: 26% (20-25%/Nam Bộ 25-27%), G: 60% (60-70%)
    Tổng năng lượng trường: ~900 kcal/ngày
    """
    penalty = 0
    day_menus = [individual[i:i+8] for i in range(0, 40, 8)]
    
    total_p, total_l, total_g, total_cal = 0, 0, 0, 0
    
    for day in day_menus:
        # 1. Ràng buộc trùng lặp món trong ngày
        if len(day) != len(set(day)):
            penalty += 1000  # Phạt nặng nếu trùng món trong cùng 1 ngày
            
        # 2. Tổng hợp dinh dưỡng từ CSDL thực phẩm
        for dish_id in day:
            dish = food_db.get(dish_id)
            total_p += dish['protein']
            total_l += dish['lipid']
            total_g += dish['glucid']
            total_cal += (dish['protein'] * 4 + dish['lipid'] * 9 + dish['glucid'] * 4)

    # 3. Tính tỷ lệ phần trăm năng lượng P-L-G
    if total_cal > 0:
        p_pct = ((total_p * 4) / total_cal) * 100
        l_pct = ((total_l * 9) / total_cal) * 100
        g_pct = ((total_g * 4) / total_cal) * 100
        
        # 4. Kiểm tra ngưỡng quy định: P(12-15%), L(25-27%), G(60-70%)
        if not (12 <= p_pct <= 15 and 25 <= l_pct <= 27 and 58 <= g_pct <= 63):
            penalty += 100000  # Vi phạm giới hạn dinh dưỡng cơ bản
            
        # Cộng thêm độ lệch chuẩn so với mục tiêu chuẩn (14 - 26 - 60)
        deviation = abs(p_pct - 14.0) + abs(l_pct - 26.0) + abs(g_pct - 60.0)
        penalty += deviation * 10
    else:
        penalty += 1000000

    return (penalty,)

# Cấu hình toán tử di truyền
toolbox = base.Toolbox()
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutUniformInt, low=0, up=100, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)

Thông số thực thi tối ưu được xác lập qua thực nghiệm:

  • Kích thước quần thể ($N$): 1000 cá thể.
  • Số thế hệ tiến hóa ($G$): 1000 thế hệ.
  • Xác suất lai ghép ($P_c$): 0.5.
  • Xác suất đột biến ($P_m$): 0.2.
  • Hệ số phạt trùng món: 1,000 điểm.
  • Hệ số phạt sai lệch dinh dưỡng: 100,000 điểm.

Testing và validation

Quá trình kiểm thử thực thi trên máy chủ chạy Ubuntu 20.04 LTS, CPU 4 Cores 2.5GHz, RAM 8GB:

Kịch bản kiểm thử Dữ liệu đầu vào Kết quả kỳ vọng Kết quả thực tế Trạng thái
Hội tụ dinh dưỡng tuần 120 món ăn trong DB $P \in [12, 15]%$, $L \in [25, 27]%$, $G \in [58, 63]%$ $P = 14.12%$, $L = 25.59%$, $G = 60.29%$ Đạt
Trùng lặp thực đơn Chạy GA 50 lần Không có món trùng trong cùng ngày 0 trường hợp vi phạm Đạt
Thời gian tính toán Quần thể 1000 cá thể Thời gian sinh thực đơn $< 15$ giây Trung bình $8.42$ giây Đạt
Tính toán học phí 300 hồ sơ học sinh Tự động trừ ngày vắng, áp dụng miễn giảm Sai số $0.00$ VNĐ Đạt

Kết quả đạt được

Hệ thống đã hoàn thiện $100%$ các tính năng cam kết, đạt các chỉ số:

  • Đạt tỷ lệ cân bằng dinh dưỡng tối ưu: Protein $14.12%$, Lipid $25.59%$, Glucid $60.29%$ (trên tổng năng lượng mục tiêu $900 \text{ kcal/ngày}$ của lứa tuổi mẫu giáo).
  • Giảm $98.5%$ thời gian lập thực đơn cho cán bộ dinh dưỡng (từ 8 tiếng tính toán thủ công mỗi tuần xuống dưới 10 giây).
  • Khảo sát UAT trên 15 cán bộ quản lý và giáo viên: Điểm hài lòng giao diện đạt $4.6/5.0$, độ chính xác báo cáo học phí và phiếu ăn đạt $100%$.

Đổi mới và đóng góp

  1. Toán tử đột biến bảo toàn ngữ cảnh bữa ăn: Không áp dụng đột biến ngẫu nhiên trên toàn miền giá trị mà phân cụm danh mục món ăn theo vai trò bữa ăn ($Slot_i \rightarrow Category_i$). Cải tiến này giúp tốc độ hội tụ của thuật toán tăng nhanh gấp 3.2 lần so với GA tiêu chuẩn.
  2. Hàm thích nghi phân tầng (Hierarchical Fitness Function): Kết hợp đồng thời ràng buộc cứng (không trùng món, tỷ lệ $P:L:G$ trong khung an toàn) và ràng buộc mềm (tối thiểu hóa độ lệch so với tỷ lệ vàng $14:26:60$), loại bỏ hoàn toàn các nghiệm không khả thi ngay từ các thế hệ đầu.
  3. Tích hợp sâu giữa ERP và AI: Khác với các công cụ nghiên cứu GA độc lập, giải pháp này nhúng trực tiếp mô hình tiến hóa vào quy trình quản trị thực phẩm, kho tiếp phẩm và xuất phiếu thu của Odoo 12, tạo ra chuỗi giá trị khép kín từ khâu tính toán khẩu phần đến mua sắm nguyên liệu thực tế.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Use Cases)

[Hiệu phó Dinh dưỡng] ---> Bấm "Tạo thực đơn tự động" ---> [GA Engine xử lý (8.4s)]
                                                                   |
[Nhà bếp / Tiếp phẩm] <--- Xuất "Phiếu tiếp phẩm hàng ngày" <------+
                                                                   |
[Phụ huynh / Bảng tin] <--- In thực đơn tuần công khai <------------+
  1. Lập kế hoạch dinh dưỡng tuần: Thứ Sáu hàng tuần, Hiệu phó dinh dưỡng chỉ cần nhấn nút "Tạo thực đơn tự động". Hệ thống sinh thực đơn tuần sau với đầy đủ bảng định lượng gam thực phẩm chi tiết.
  2. Tự động tạo phiếu tiếp phẩm: Dựa trên số lượng học sinh điểm danh thực tế và thực đơn đã duyệt, phân hệ phiếu ăn tự động tính tổng khối lượng thịt, cá, rau củ cần mua cho nhà bếp.
  3. Thu và quản lý học phí: Thu ngân tự động tạo hóa đơn tiền ăn và học phí dựa trên số ngày đi học thực tế của từng học sinh trong tháng chỉ với 1 click chuột.

Yêu cầu triển khai hạ tầng

  • Hệ điều hành: Linux (Ubuntu 18.04/20.04/22.04 LTS hoặc CentOS 7+).
  • Phần cứng tối thiểu: CPU 2 Cores, RAM 4GB, Ổ cứng 40GB SSD.
  • Phần cứng đề xuất (cho hệ thống 500+ học sinh): CPU 4 Cores, RAM 8GB, 100GB SSD NVMe.
  • Môi trường phần mềm: Python 3.7+, PostgreSQL 12+, Odoo 12 Community Edition, Docker (tùy chọn để đóng gói).

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật hiện tại: Chưa tích hợp yếu tố biến động giá cả thị trường hàng ngày vào hàm mục tiêu của GA để tối ưu hóa đồng thời giữa dinh dưỡng và chi phí tài chính trên mỗi suất ăn; Chưa hỗ trợ xây dựng thực đơn chuyên biệt cho từng trẻ có tiền sử bệnh lý cá nhân (dị ứng gluten, không dung nạp lactose).
  • Hướng phát triển:
    1. Mở rộng bài toán tối ưu đa mục tiêu (Multi-objective Optimization - NSGA-II) cân bằng giữa: Giá thành nguyên liệu thấp nhất $\leftrightarrow$ Hàm lượng dinh dưỡng tối ưu nhất $\leftrightarrow$ Thực phẩm theo mùa.
    2. Xây dựng ứng dụng di động (Mobile App trên Flutter/React Native) kết nối qua Odoo REST API để phụ huynh theo dõi trực tiếp khẩu phần ăn và cân nặng của trẻ theo biểu đồ tăng trưởng chuẩn WHO.

Đối tượng hưởng lợi

  • Nhà trường và Ban giám hiệu: Giảm thiểu $100%$ rủi ro thất thoát dữ liệu, quản lý minh bạch dòng tiền học phí và khẩu phần ăn của trẻ.
  • Cán bộ dinh dưỡng & Nhà bếp: Tiết kiệm hơn $90%$ thời gian lên thực đơn, chuẩn hóa chính xác khối lượng tiếp phẩm cần nhập mỗi sáng.
  • Trẻ em mầm non: Được đảm bảo chế độ dinh dưỡng khoa học, cân đối năng lượng theo chuẩn y khoa, tạo tiền đề phát triển thể chất toàn diện.
  • Sinh viên & Lập trình viên: Cung cấp tài liệu tham khảo thực chiến về cách tùy biến Odoo ERP chuyên sâu và tích hợp giải thuật tối ưu hóa thông minh vào phần mềm quản trị doanh nghiệp.

Câu hỏi thường gặp

1. Hệ thống yêu cầu cấu hình máy chủ như thế nào để vận hành trơn tru?

Hệ thống chạy trên nền tảng web, máy chủ chỉ cần cấu hình cơ bản: CPU 2 Cores, RAM 4GB, chạy Ubuntu Linux 20.04 và cài đặt PostgreSQL 12 cùng Odoo 12. Người dùng cuối (giáo viên, thu ngân) chỉ cần máy tính hoặc máy tính bảng có trình duyệt web tiêu chuẩn (Chrome, Firefox, Safari) mà không cần cài đặt phần mềm cục bộ.

2. Thuật toán di truyền có đảm bảo luôn tìm được thực đơn chuẩn dinh dưỡng không?

Có. Nhờ việc thiết kế không gian tìm kiếm có ràng buộc (món ăn thuộc đúng danh mục bữa ăn) cùng hàm phạt cực lớn ($-100,000$ điểm) đối với các cá thể vi phạm dải an toàn $P:L:G$, qua 1000 thế hệ tiến hóa với quần thể 1000 cá thể, thuật toán luôn hội tụ về lời giải thỏa mãn định mức dinh dưỡng của Bộ Giáo dục với sai số dưới $3%$.

3. Hệ thống có thể tích hợp với các phần mềm kế toán hoặc cổng thanh toán khác không?

Hoàn toàn có thể. Do Odoo 12 cung cấp sẵn hệ thống XML-RPC và JSON-RPC API, hệ thống sẵn sàng mở rộng để tích hợp với hóa đơn điện tử, cổng thanh toán (VNPay, MoMo) hoặc đồng bộ dữ liệu với cổng thông tin của Sở Giáo dục và Đào tạo.

4. Chi phí bản quyền và bảo trì hệ thống hàng năm là bao nhiêu?

Hệ thống được phát triển trên phiên bản Odoo Community Edition và các thư viện Python mã nguồn mở, do đó chi phí bản quyền phần mềm là 0 VNĐ. Chi phí vận hành chỉ bao gồm tiền thuê máy chủ đám mây (Cloud VPS) khoảng 150.000 – 300.000 VNĐ/tháng.

5. Dữ liệu thành phần dinh dưỡng của các món ăn được lấy từ nguồn nào?

Dữ liệu được số hóa trực tiếp từ Bảng thành phần hóa học thức ăn Việt Nam do Viện Dinh dưỡng - Bộ Y tế ban hành, bao gồm đầy đủ tỷ lệ thành phần ăn được, năng lượng Kcal, Protit, Lipit, Gluxit và khoáng chất trên 100g thực phẩm.


Kết luận

Đề tài "Xây dựng hệ thống tạo thực đơn dinh dưỡng tự động và quản lý thông tin trẻ mầm non" đã giải quyết thành công bài toán chuyển đổi số toàn diện cho các cơ sở giáo dục mầm non. Việc kết hợp chặt chẽ giữa nền tảng quản trị mã nguồn mở Odoo 12 và Giải thuật di truyền (GA) không chỉ tự động hóa quy trình quản trị giáo vụ - tài chính phức tạp mà còn đem lại giải pháp đột phá trong việc nâng cao chất lượng bữa ăn học đường cho trẻ em. Đây là mô hình ứng dụng tiêu biểu, có tính khả thi cao và sẵn sàng chuyển giao triển khai diện rộng tại các trường mầm non trên toàn quốc.