<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="vi"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://hydrostructai.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://hydrostructai.github.io/" rel="alternate" type="text/html" hreflang="vi" /><updated>2026-02-06T11:00:25+07:00</updated><id>https://hydrostructai.github.io/feed.xml</id><title type="html">Hydro Structure AI</title><subtitle>Các ứng dụng Web cho Kỹ thuật Xây dựng</subtitle><author><name>Hydro Structure AI</name></author><entry><title type="html">PMP Project Management Professional Exam 2025 (Version e7002) - Comprehensive Review</title><link href="https://hydrostructai.github.io/pmp/education/career/pmp-freecram/" rel="alternate" type="text/html" title="PMP Project Management Professional Exam 2025 (Version e7002) - Comprehensive Review" /><published>2026-02-06T16:00:00+07:00</published><updated>2026-02-06T16:00:00+07:00</updated><id>https://hydrostructai.github.io/pmp/education/career/pmp-freecram</id><content type="html" xml:base="https://hydrostructai.github.io/pmp/education/career/pmp-freecram/"><![CDATA[<blockquote>
  <p><strong>Note:</strong> This report is based on the analysis of PMP exam resources, specifically the structure and content style of the Freecram PMP v2025-12-17 update.<br />
<em>Lưu ý: Báo cáo này dựa trên phân tích các tài liệu thi PMP, cụ thể là cấu trúc và phong cách nội dung của bản cập nhật Freecram PMP v2025-12-17.</em></p>
</blockquote>

<h2 id="1-objectives--mục-tiêu">1. Objectives / Mục tiêu</h2>

<p>This report aims to provide a scientific and structured analysis of the PMP exam preparation materials sourced from Freecram (Version e7002), facilitating deep understanding for candidates.<br />
<em>Báo cáo này nhằm cung cấp một phân tích khoa học và có cấu trúc về các tài liệu luyện thi PMP từ nguồn Freecram (Phiên bản e7002), giúp các ứng viên hiểu sâu vấn đề.</em></p>

<ul>
  <li><strong>Analyze the Exam Structure</strong>: Understand the distribution of questions across People, Process, and Business Environment domains.
    <ul>
      <li><em>Phân tích cấu trúc bài thi: Hiểu sự phân bổ câu hỏi qua các miền Con người, Quy trình và Môi trường Kinh doanh.</em></li>
    </ul>
  </li>
  <li><strong>Decide Strategy</strong>: Provide a roadmap for new learners to study efficiently in a short time.
    <ul>
      <li><em>Quyết định chiến lược: Cung cấp lộ trình cho người mới học hiệu quả trong thời gian ngắn.</em></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="2-introduction-to-freecram--giới-thiệu-về-freecram">2. Introduction to Freecram / Giới thiệu về Freecram</h2>

<p>Freecram is a well-known online platform that provides updated exam dumps and practice questions for various IT and professional certifications, including PMP.<br />
<em>Freecram là một nền tảng trực tuyến nổi tiếng cung cấp các bộ đề thi cập nhật và câu hỏi thực hành cho nhiều chứng chỉ CNTT và chuyên nghiệp, bao gồm cả PMP.</em></p>

<ul>
  <li><strong>Role</strong>: It serves as a simulation tool to help candidates familiarise themselves with the actual exam format and time pressure.
    <ul>
      <li><em>Vai trò: Nó đóng vai trò như một công cụ mô phỏng giúp thí sinh làm quen với định dạng bài thi thực tế và áp lực thời gian.</em></li>
    </ul>
  </li>
  <li><strong>Version e7002</strong>: This specific release for the 2025 PMP exam includes questions that reflect the latest Examination Content Outline (ECO).
    <ul>
      <li><em>Phiên bản e7002: Bản phát hành cụ thể này cho kỳ thi PMP 2025 bao gồm các câu hỏi phản ánh Đề cương Nội dung Thi (ECO) mới nhất.</em></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="3-pmp-exam-overview-2025--tổng-quan-bài-thi-pmp">3. PMP Exam Overview 2025 / Tổng quan bài thi PMP</h2>

<p>The 2025 PMP Exam continues to adhere to the Examination Content Outline (ECO) 2021, focusing on three key domains.<br />
<em>Kỳ thi PMP năm 2025 tiếp tục tuân thủ theo Đề cương Nội dung Thi (ECO) 2021, tập trung vào ba miền chính.</em></p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Domain / Miền</th>
      <th style="text-align: left">Percentage / Tỷ lệ</th>
      <th style="text-align: left">Focus / Trọng tâm</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>People (Con người)</strong></td>
      <td style="text-align: left">42%</td>
      <td style="text-align: left">Leading teams, managing conflict, supporting virtual teams.<br /><em>Lãnh đạo nhóm, quản lý xung đột, hỗ trợ nhóm ảo.</em></td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Process (Quy trình)</strong></td>
      <td style="text-align: left">50%</td>
      <td style="text-align: left">Methodology (Agile/Waterfall/Hybrid), managing budget, schedule, scope.<br /><em>Phương pháp luận (Agile/Waterfall/Lai), quản lý ngân sách, tiến độ, phạm vi.</em></td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Business Env (Môi trường KD)</strong></td>
      <td style="text-align: left">8%</td>
      <td style="text-align: left">Compliance, delivering value, organizational change.<br /><em>Tuân thủ, chuyển giao giá trị, thay đổi tổ chức.</em></td>
    </tr>
  </tbody>
</table>

<figure>
  <img src="/assets/images/posts/2026-02-06-pmp-freecram/PMP-Exam-Structure-2025.png" alt="PMP Exam Structure 2025" />
  <figcaption>PMP Exam Structure 2025 Distribution. (Source: PM Study Circle)</figcaption>
</figure>

<hr />

<h2 id="4-features-of-version-e7002--đặc-điểm-phiên-bản-e7002">4. Features of Version e7002 / Đặc điểm phiên bản e7002</h2>

<p>Based on the metadata from the source link, this version (e7002) represents a significant update for late 2025 candidates.<br />
<em>Dựa trên siêu dữ liệu từ liên kết nguồn, phiên bản này (e7002) đại diện cho một bản cập nhật quan trọng cho các ứng viên cuối năm 2025.</em></p>

<ul>
  <li><strong>Update Date</strong>: December 17, 2025.
    <ul>
      <li><em>Ngày cập nhật: 17/12/2025.</em></li>
    </ul>
  </li>
  <li><strong>Content Shift</strong>: Increased focus on “Hybrid” scenarios and “Soft Skills” (Servant Leadership).
    <ul>
      <li><em>Dịch chuyển nội dung: Tăng cường tập trung vào các tình huống “Lai” (Hybrid) và “Kỹ năng mềm” (Lãnh đạo phục vụ).</em></li>
    </ul>
  </li>
  <li><strong>Question Types</strong>: Situation-based multiple choice, Drag-and-drop, and Hotspot.
    <ul>
      <li><em>Loại câu hỏi: Trắc nghiệm tình huống, Kéo-thả, và Điểm nóng (Hotspot).</em></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="5-deep-dive-common-pitfalls--mistakes--các-lỗi-và-bẫy-thường-gặp">5. Deep Dive: Common Pitfalls &amp; Mistakes / Các lỗi và bẫy thường gặp</h2>

<p>This section highlights areas where candidates often lose points, illustrated with examples inspired by the Freecram database.<br />
<em>Phần này nêu bật các lĩnh vực mà thí sinh thường mất điểm, được minh họa bằng các ví dụ lấy cảm hứng từ cơ sở dữ liệu Freecram.</em></p>

<h3 id="51-agile-vs-waterfall-confusion--nhầm-lẫn-giữa-agile-và-waterfall">5.1. Agile vs. Waterfall Confusion / Nhầm lẫn giữa Agile và Waterfall</h3>

<p><strong>Pitfall</strong>: Applying traditional heavy documentation (Waterfall) to an Agile scenario, or vice versa.<br />
<em>Bẫy: Áp dụng việc làm tài liệu nặng nề truyền thống (Waterfall) vào tình huống Agile, hoặc ngược lại.</em></p>

<p><strong>Example 1:</strong></p>
<ul>
  <li><strong>Context</strong>: The team is using Scrum. A stakeholder asks for a change.
    <ul>
      <li><em>Bối cảnh: Nhóm đang sử dụng Scrum. Một bên liên quan yêu cầu thay đổi.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Submit a Change Request to the CCB (Change Control Board).
    <ul>
      <li><em>Phản xạ sai: Gửi Yêu cầu Thay đổi lên CCB (Ban Kiểm soát Thay đổi).</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Discuss with the Product Owner to prioritize it in the Backlog.
    <ul>
      <li><em>Hành động đúng: Thảo luận với Product Owner để ưu tiên trong Backlog.</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 2:</strong></p>
<ul>
  <li><strong>Context</strong>: A critical bug is found during a Sprint.
    <ul>
      <li><em>Bối cảnh: Một lỗi nghiêm trọng được tìm thấy trong Sprint.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Update the project management plan schedule immediately.
    <ul>
      <li><em>Phản xạ sai: Cập nhật tiến độ kế hoạch quản lý dự án ngay lập tức.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: The team collaborates to fix it; if it endangers the Sprint Goal, the Product Owner decides.
    <ul>
      <li><em>Hành động đúng: Nhóm cộng tác để sửa nó; nếu nó đe dọa Mục tiêu Sprint, Product Owner sẽ quyết định.</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 3:</strong></p>
<ul>
  <li><strong>Context</strong>: Team velocity is fluctuating wildly.
    <ul>
      <li><em>Bối cảnh: Tốc độ (Velocity) của nhóm đang dao động dữ dội.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Manager assigns tasks to stabilize work.
    <ul>
      <li><em>Phản xạ sai: Quản lý phân công nhiệm vụ để ổn định công việc.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Facilitate a Retrospective to find the root cause.
    <ul>
      <li><em>Hành động đúng: Điều phối cuộc họp Cải tiến (Retrospective) để tìm nguyên nhân gốc rễ.</em></li>
    </ul>
  </li>
</ul>

<h3 id="52-servant-leadership-misunderstanding--hiểu-sai-về-lãnh-đạo-phục-vụ">5.2. Servant Leadership Misunderstanding / Hiểu sai về Lãnh đạo Phục vụ</h3>

<p><strong>Pitfall</strong>: Solving problems <em>for</em> the team instead of empowering them, or ignoring conflicts hoping they vanish.<br />
<em>Bẫy: Giải quyết vấn đề *thay cho</em> nhóm thay vì trao quyền cho họ, hoặc phớt lờ xung đột với hy vọng chúng tự biến mất.*</p>

<p><strong>Example 1:</strong></p>
<ul>
  <li><strong>Context</strong>: Two team members are arguing about a technical solution.
    <ul>
      <li><em>Bối cảnh: Hai thành viên nhóm đang tranh luận về giải pháp kỹ thuật.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: The PM decides the best solution to save time.
    <ul>
      <li><em>Phản xạ sai: PM quyết định giải pháp tốt nhất để tiết kiệm thời gian.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Facilitate a collaborative session for them to reach a consensus.
    <ul>
      <li><em>Hành động đúng: Điều phối một phiên làm việc cộng tác để họ đạt được đồng thuận.</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 2:</strong></p>
<ul>
  <li><strong>Context</strong>: A junior member is struggling with a task.
    <ul>
      <li><em>Bối cảnh: Một thành viên mới đang gặp khó khăn với nhiệm vụ.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Reassign the task to a senior member.
    <ul>
      <li><em>Phản xạ sai: Giao lại nhiệm vụ cho một thành viên cấp cao.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Provide coaching or arrange pair programming.
    <ul>
      <li><em>Hành động đúng: Cung cấp huấn luyện hoặc sắp xếp lập trình cặp.</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 3:</strong></p>
<ul>
  <li><strong>Context</strong>: Stakeholders are bypassing the Product Owner to give work to the team.
    <ul>
      <li><em>Bối cảnh: Các bên liên quan đang bỏ qua Product Owner để giao việc cho nhóm.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Tell the team to do the work to keep stakeholders happy.
    <ul>
      <li><em>Phản xạ sai: Bảo nhóm làm việc đó để giữ các bên liên quan vui vẻ.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Protect the team and redirect stakeholders to the Product Owner.
    <ul>
      <li><em>Hành động đúng: Bảo vệ nhóm và hướng các bên liên quan đến Product Owner.</em></li>
    </ul>
  </li>
</ul>

<h3 id="53-process-compliance-vs-tailoring--tuân-thủ-quy-trình-vs-tùy-chỉnh">5.3. Process Compliance vs. Tailoring / Tuân thủ Quy trình vs. Tùy chỉnh</h3>

<p><strong>Pitfall</strong>: Following a process blindly without considering the value or context (Hybrid).<br />
<em>Bẫy: Tuân thủ quy trình một cách mù quáng mà không xem xét giá trị hoặc bối cảnh (Lai).</em></p>

<p><strong>Example 1:</strong></p>
<ul>
  <li><strong>Context</strong>: A small compliance project requires strict documentation.
    <ul>
      <li><em>Bối cảnh: Một dự án tuân thủ nhỏ yêu cầu tài liệu nghiêm ngặt.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Use Agile just because it’s popular.
    <ul>
      <li><em>Phản xạ sai: Sử dụng Agile chỉ vì nó phổ biến.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Use a predictive approach (Waterfall) to ensure compliance.
    <ul>
      <li><em>Hành động đúng: Sử dụng phương pháp dự đoán (Waterfall) để đảm bảo tuân thủ.</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 2:</strong></p>
<ul>
  <li><strong>Context</strong>: The project is falling behind schedule due to strict approval layers.
    <ul>
      <li><em>Bối cảnh: Dự án đang bị chậm tiến độ do các lớp phê duyệt nghiêm ngặt.</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Crash the schedule by adding more resources immediately.
    <ul>
      <li><em>Phản xạ sai: Đẩy nhanh tiến độ (Crash) bằng cách thêm nguồn lực ngay lập tức.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Assess if the approval process can be streamlined (Tailoring).
    <ul>
      <li><em>Hành động đúng: Đánh giá xem quy trình phê duyệt có thể được tinh giản hay không (Tùy chỉnh).</em></li>
    </ul>
  </li>
</ul>

<p><strong>Example 3:</strong></p>
<ul>
  <li><strong>Context</strong>: A hybrid project has both hardware (waterfall) and software (agile) components.
    <ul>
      <li><em>Bối cảnh: Một dự án lai có cả phần cứng (waterfall) và phần mềm (agile).</em></li>
    </ul>
  </li>
  <li><strong>Wrong Reflex</strong>: Force the software team to follow the hardware milestones strictly.
    <ul>
      <li><em>Phản xạ sai: Ép đội phần mềm phải tuân thủ nghiêm ngặt các mốc tiến độ của phần cứng.</em></li>
    </ul>
  </li>
  <li><strong>Correct Action</strong>: Integrate the backlogs and align synchronization points.
    <ul>
      <li><em>Hành động đúng: Tích hợp các backlog và thống nhất các điểm đồng bộ hóa.</em></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="6-deep-dive-sample-question-analysis--phân-tích-câu-hỏi-mẫu">6. Deep Dive: Sample Question Analysis / Phân tích câu hỏi mẫu</h2>

<p>We analyze a specific scenario typical of the 2025 exam format (Question ID: q956).<br />
<em>Chúng ta phân tích một tình huống cụ thể điển hình của định dạng thi 2025 (ID câu hỏi: q956).</em></p>

<h3 id="question-scenario">Question Scenario</h3>
<p><strong>Question:</strong> The project manager started a new project and must ensure that the team members and stakeholders are <strong>properly engaged and understand the high-level requirements and project objectives</strong>. What should the project manager do first?</p>

<p>A. Create a detailed WBS and assign tasks to team members.<br />
B. Conduct a kick-off meeting to set expectations and gain commitment.<br />
C. Send the project charter to all stakeholders via email.<br />
D. Develop a resource management plan to define roles.</p>

<hr />

<h3 id="answer--explanation--đáp-án--giải-thích">Answer &amp; Explanation / Đáp án &amp; Giải thích</h3>

<p><strong>Correct Answer: B</strong></p>

<h4 id="1-why-b-is-correct--tại-sao-b-đúng">1. Why B is correct? / Tại sao B đúng?</h4>
<p>The Kick-off meeting is the critical event at the start of a project (or phase) to align the team and stakeholders on objectives and expectations.<br />
<em>Cuộc họp khởi động (Kick-off meeting) là sự kiện quan trọng khi bắt đầu dự án (hoặc giai đoạn) để thống nhất nhóm và các bên liên quan về mục tiêu và kỳ vọng.</em></p>

<p>It ensures everyone is “on the same page” regarding the project scope and their roles before detailed planning begins.<br />
<em>Nó đảm bảo mọi người “cùng nhìn về một hướng” liên quan đến phạm vi dự án và vai trò của họ trước khi việc lập kế hoạch chi tiết bắt đầu.</em></p>

<h4 id="2-why-others-are-incorrect--tại-sao-các-ý-khác-sai">2. Why others are incorrect? / Tại sao các ý khác sai?</h4>
<ul>
  <li><strong>A (WBS)</strong>: Too early. You cannot create a detailed WBS before clarifying high-level requirements and gaining consensus.
    <ul>
      <li><em>A (WBS): Quá sớm. Bạn không thể tạo WBS chi tiết trước khi làm rõ các yêu cầu cấp cao và đạt được sự đồng thuận.</em></li>
    </ul>
  </li>
  <li><strong>C (Email Charter)</strong>: Passive communication. Sending a document does not ensure understanding or engagement; a meeting allows for Q&amp;A and interaction.
    <ul>
      <li><em>C (Gửi Email Charter): Giao tiếp thụ động. Việc gửi tài liệu không đảm bảo sự hiểu biết hoặc cam kết; một cuộc họp cho phép hỏi đáp và tương tác.</em></li>
    </ul>
  </li>
  <li><strong>D (Resource Plan)</strong>: This is part of detailed planning. While defining roles is important, the initial alignment (kick-off) comes first.
    <ul>
      <li><em>D (Kế hoạch nguồn lực): Đây là một phần của lập kế hoạch chi tiết. Mặc dù xác định vai trò là quan trọng, nhưng sự thống nhất ban đầu (khởi động) phải diễn ra trước.</em></li>
    </ul>
  </li>
</ul>

<figure>
  <img src="/assets/images/posts/2026-02-06-pmp-freecram/Stakeholder-Engagement-Flow.png" alt="Stakeholder Engagement Flow" />
  <figcaption>Stakeholder Engagement Process Flow. (Source: Creately)</figcaption>
</figure>

<hr />

<h2 id="7-study-strategy-for-first-time-pass--chiến-lược-thi-đỗ-lần-đầu">7. Study Strategy for First-Time Pass / Chiến lược thi đỗ lần đầu</h2>

<p>To pass the PMP exam quickly (within 4-6 weeks) using resources like Freecram, follow this solution.<br />
<em>Để thi đỗ PMP nhanh chóng (trong vòng 4-6 tuần) sử dụng các nguồn lực như Freecram, hãy làm theo giải pháp này.</em></p>

<h3 id="phase-1-mindset-mastery-1-week--giai-đoạn-1-làm-chủ-tư-duy">Phase 1: Mindset Mastery (1 Week) / Giai đoạn 1: Làm chủ tư duy</h3>
<ul>
  <li><strong>Agile Manifesto</strong>: internalize the 4 values and 12 principles.
    <ul>
      <li><em>Tuyên ngôn Agile: Thẩm thấu 4 giá trị và 12 nguyên tắc.</em></li>
    </ul>
  </li>
  <li><strong>Servant Leadership</strong>: The PM is a facilitator, not a dictator. Always choose answers that “protect the team” and “remove impediments”.
    <ul>
      <li><em>Lãnh đạo phục vụ: PM là người điều phối, không phải kẻ độc tài. Luôn chọn đáp án “bảo vệ nhóm” và “loại bỏ trở ngại”.</em></li>
    </ul>
  </li>
</ul>

<h3 id="phase-2-practice-with-purpose-2-3-weeks--giai-đoạn-2-luyện-tập-có-mục-đích">Phase 2: Practice with Purpose (2-3 Weeks) / Giai đoạn 2: Luyện tập có mục đích</h3>
<ul>
  <li><strong>Simulation</strong>: Use exam dumps/simulators to get used to the wording.
    <ul>
      <li><em>Mô phỏng: Sử dụng bộ đề/mô phỏng để làm quen với cách dùng từ.</em></li>
    </ul>
  </li>
  <li><strong>Gap Analysis</strong>: For every wrong answer, read the explanation (like in Section 4 above) deeply.
    <ul>
      <li><em>Phân tích lỗ hổng: Với mỗi câu sai, đọc phần giải thích (như ở Mục 4 trên) thật sâu.</em></li>
    </ul>
  </li>
</ul>

<h3 id="phase-3-final-polishing-1-week--giai-đoạn-3-trau-chuốt-cuối-cùng">Phase 3: Final Polishing (1 Week) / Giai đoạn 3: Trau chuốt cuối cùng</h3>
<ul>
  <li><strong>Time Management</strong>: Practice sitting for 230 minutes answering 180 questions.
    <ul>
      <li><em>Quản lý thời gian: Tập ngồi trong 230 phút để trả lời 180 câu hỏi.</em></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="8-exam-experience--kinh-nghiệm-thi-thực-tế">8. Exam Experience / Kinh nghiệm thi thực tế</h2>

<p>Based on successful candidates using the 2025 materials:<br />
<em>Dựa trên các ứng viên thành công sử dụng tài liệu 2025:</em></p>

<ol>
  <li><strong>Don’t Memorize, Understand</strong>: The actual exam changes variable names and contexts. Memorizing exact questions from dumps will fail.
    <ul>
      <li><em>Đừng học vẹt, hãy hiểu: Bài thi thực tế thay đổi tên biến và bối cảnh. Học thuộc lòng câu hỏi từ bộ đề sẽ thất bại.</em></li>
    </ul>
  </li>
  <li><strong>Watch the Clock</strong>: You have ~1.2 minutes per question. If stuck, flag it and move on.
    <ul>
      <li><em>Canh đồng hồ: Bạn có khoảng 1.2 phút mỗi câu. Nếu bí, hãy cắm cờ và đi tiếp.</em></li>
    </ul>
  </li>
  <li><strong>Hybrid is Key</strong>: Most questions are not purely Agile or Waterfall, but a mix. Look for keywords like “transitioning to agile”.
    <ul>
      <li><em>Hybrid là chìa khóa: Hầu hết câu hỏi không thuần Agile hay Waterfall, mà là sự pha trộn. Tìm các từ khóa như “đang chuyển đổi sang agile”.</em></li>
    </ul>
  </li>
</ol>

<hr />

<h2 id="9-review-of-additional-resources--đánh-giá-tài-liệu-bổ-sung">9. Review of Additional Resources / Đánh giá Tài liệu Bổ sung</h2>

<p>Below is a summary of essential resources recommended for PMP candidates to supplement their study, focusing on exam structure, policies, and visual models.
<em>Dưới đây là tóm tắt các nguồn tài liệu thiết yếu được khuyến nghị cho thí sinh PMP để bổ sung cho việc học, tập trung vào cấu trúc bài thi, chính sách và các mô hình trực quan.</em></p>

<h3 id="91-pm-study-circle-fahad-usmani">9.1. PM Study Circle (Fahad Usmani)</h3>
<p><strong>Content</strong>: This series of articles covers the foundational “administrative” knowledge of the PMP certification. It details <strong>What PMP is</strong>, the <strong>Eligibility Requirements</strong>, the <strong>Application Process</strong> (including audits), <strong>Certification Costs</strong>, and the detailed <strong>Exam Format</strong>.
<em>Nội dung: Chuỗi bài viết này bao gồm các kiến thức nền tảng về “thủ tục” của chứng chỉ PMP. Nó chi tiết hóa PMP là gì, Yêu cầu điều kiện, Quy trình nộp đơn (bao gồm kiểm tra hồ sơ), Chi phí chứng chỉ, và Cấu trúc bài thi chi tiết.</em></p>

<p><strong>Objective</strong>: To provide a clear, step-by-step roadmap for beginners to navigate the complexities of PMI’s registration process without confusion.
<em>Mục tiêu: Cung cấp lộ trình rõ ràng, từng bước cho người mới bắt đầu để điều hướng các phức tạp trong quy trình đăng ký của PMI mà không bị bối rối.</em></p>

<p><strong>Relevance</strong>: Verify your eligibility and budget before starting. The exam format guide is the source for the structure distribution chart used in Section 3.
<em>Sự liên quan: Xác minh điều kiện và ngân sách của bạn trước khi bắt đầu. Hướng dẫn cấu trúc bài thi là nguồn của biểu đồ phân bổ cấu trúc được dùng trong Mục 3.</em></p>

<h3 id="92-creately-visual-guides">9.2. Creately (Visual Guides)</h3>
<p><strong>Content</strong>: Provides comprehensive guides on visual modeling, specifically the <strong>Stakeholder Engagement Model</strong>. It explains how to map stakeholders based on their interest and power, and how to move them from “Unaware” to “Leading”.
<em>Nội dung: Cung cấp các hướng dẫn toàn diện về mô hình hóa trực quan, cụ thể là Mô hình Gắn kết Bên liên quan. Nó giải thích cách lập bản đồ các bên liên quan dựa trên sự quan tâm và quyền lực, và cách chuyển họ từ trạng thái “Không biết” sang “Dẫn dắt”.</em></p>

<p><strong>Objective</strong>: To help project managers use visual tools to analyze and communicate complex stakeholder relationships effectively.
<em>Mục tiêu: Giúp các giám đốc dự án sử dụng công cụ trực quan để phân tích và giao tiếp các mối quan hệ phức tạp với bên liên quan một cách hiệu quả.</em></p>

<p><strong>Relevance</strong>: This resource is the origin of the engagement logic discussed in the “Sample Question Analysis” (Section 6).
<em>Sự liên quan: Tài liệu này là nguồn gốc của logic về sự gắn kết được thảo luận trong phần “Phân tích câu hỏi mẫu” (Mục 6).</em></p>

<h3 id="93-pmi-official-documents-eco--handbook">9.3. PMI Official Documents (ECO &amp; Handbook)</h3>
<p><strong>Content</strong>: The <strong>Examination Content Outline (ECO)</strong> lists the specific Tasks and Enablers examined. The <strong>Handbook</strong> outlines policies, code of ethics, and maintaining PDUs.
<em>Nội dung: Đề cương Nội dung Thi (ECO) liệt kê các Nhiệm vụ (Tasks) và Yếu tố hỗ trợ (Enablers) cụ thể được thi. Sổ tay nêu rõ các chính sách, quy tắc đạo đức và việc duy trì PDU.</em></p>

<p><strong>Objective</strong>: To serve as the “single source of truth” for the exam. Any third-party material must align with these documents.
<em>Mục tiêu: Đóng vai trò là “nguồn sự thật duy nhất” cho kỳ thi. Mọi tài liệu bên thứ ba phải phù hợp với các tài liệu này.</em></p>

<hr />

<h2 id="10-references--tài-liệu-tham-khảo">10. References / Tài liệu tham khảo</h2>

<ol>
  <li><strong>Creately</strong>. <em>Guide to Stakeholder Engagement Model</em>. <a href="https://creately.com/guides/stakeholder-engagement-model/">https://creately.com/guides/stakeholder-engagement-model/</a></li>
  <li><strong>Freecram</strong>. <em>PMP Project Management Professional 2025 Version (e7002)</em>. <a href="https://www.freecram.net/exam/PMP-project-management-professional-2025-version-e7002.html">https://www.freecram.net/exam/PMP-project-management-professional-2025-version-e7002.html</a></li>
  <li><strong>Freecram</strong>. <em>Sample Question Analysis (q956)</em>. <a href="https://www.freecram.net/question/PMI.PMP.v2025-12-17.q956">https://www.freecram.net/question/PMI.PMP.v2025-12-17.q956</a></li>
  <li><strong>PM Study Circle</strong>. <em>Cost of PMP Certification</em>. <a href="https://pmstudycircle.com/cost-of-pmp-certification/">https://pmstudycircle.com/cost-of-pmp-certification/</a></li>
  <li><strong>PM Study Circle</strong>. <em>PMP Exam Format</em>. <a href="https://pmstudycircle.com/pmp-exam-format/">https://pmstudycircle.com/pmp-exam-format/</a></li>
  <li><strong>PM Study Circle</strong>. <em>PMP Requirements</em>. <a href="https://pmstudycircle.com/pmp-requirements/">https://pmstudycircle.com/pmp-requirements/</a></li>
  <li><strong>PM Study Circle</strong>. <em>What is the PMP Application Process?</em>. <a href="https://pmstudycircle.com/what-is-the-pmp-application-process/">https://pmstudycircle.com/what-is-the-pmp-application-process/</a></li>
  <li><strong>PM Study Circle</strong>. <em>What is the PMP?</em>. <a href="https://pmstudycircle.com/what-is-the-pmp/">https://pmstudycircle.com/what-is-the-pmp/</a></li>
  <li><strong>Project Management Institute (PMI)</strong>. <em>PMP Examination Content Outline</em>. <a href="https://www.pmi.org/-/media/pmi/documents/public/pdf/certifications/pmp-examination-content-outline.pdf">https://www.pmi.org/-/media/pmi/documents/public/pdf/certifications/pmp-examination-content-outline.pdf</a></li>
  <li><strong>Project Management Institute (PMI)</strong>. <em>Project Management Professional (PMP) Handbook</em>. <a href="https://www.pmi.org/-/media/pmi/documents/public/pdf/certifications/generic-certification-handbook.pdf?rev=50817fae4cd644b2b29df06898e27a33">https://www.pmi.org/-/media/pmi/documents/public/pdf/certifications/generic-certification-handbook.pdf?rev=50817fae4cd644b2b29df06898e27a33</a></li>
</ol>]]></content><author><name>Hydro Structure AI</name></author><category term="PMP" /><category term="Education" /><category term="Career" /><category term="PMP" /><category term="Certification" /><category term="Freecram" /><category term="Exam Prep" /><category term="PMI" /><summary type="html"><![CDATA[Note: This report is based on the analysis of PMP exam resources, specifically the structure and content style of the Freecram PMP v2025-12-17 update. Lưu ý: Báo cáo này dựa trên phân tích các tài liệu thi PMP, cụ thể là cấu trúc và phong cách nội dung của bản cập nhật Freecram PMP v2025-12-17.]]></summary></entry><entry><title type="html">Markov Chain Monte Carlo (MCMC): Overview &amp;amp; Applications / Tổng quan &amp;amp; Ứng dụng</title><link href="https://hydrostructai.github.io/data%20science/algorithms/engineering/markov-chain-MC/" rel="alternate" type="text/html" title="Markov Chain Monte Carlo (MCMC): Overview &amp;amp; Applications / Tổng quan &amp;amp; Ứng dụng" /><published>2026-02-06T08:00:00+07:00</published><updated>2026-02-06T08:00:00+07:00</updated><id>https://hydrostructai.github.io/data%20science/algorithms/engineering/markov-chain-MC</id><content type="html" xml:base="https://hydrostructai.github.io/data%20science/algorithms/engineering/markov-chain-MC/"><![CDATA[<p>Markov Chain Monte Carlo (MCMC) is a powerful class of algorithms for sampling from probability distributions. By constructing a Markov chain that has the desired distribution as its equilibrium distribution, one can obtain a sample of the desired distribution to approximate complex integrals or understand posterior distributions in Bayesian statistics.<br />
<em>Markov Chain Monte Carlo (MCMC) là một lớp các thuật toán lấy mẫu từ phân phối xác suất. Bằng cách xây dựng một chuỗi Markov có phân phối cân bằng (equilibrium distribution) mong muốn, ta có thể lấy mẫu từ phân phối đó để xấp xỉ các tích phân phức tạp hoặc hiểu rõ hơn về tính chất của phân phối hậu nghiệm (posterior) trong thống kê Bayes.</em></p>

<hr />

<h2 id="1-markov-chain-chuỗi-markov">1. Markov Chain (Chuỗi Markov)</h2>

<p>A Markov chain is a stochastic model describing a sequence of possible events in which the probability of each event depends only on the state attained in the previous event.<br />
<em>Chuỗi Markov là một mô hình ngẫu nhiên mô tả một chuỗi các biến cố khả dĩ, trong đó xác suất của mỗi biến cố chỉ phụ thuộc vào trạng thái đạt được trong biến cố trước đó.</em></p>

<ul>
  <li><strong>Markov Property / Tính chất Markov</strong>: The future depends only on the present, not on the past.<br />
<em>Tương lai chỉ phụ thuộc vào hiện tại, không phụ thuộc vào quá khứ.</em>
\(P(X_{n+1} | X_n, X_{n-1}, ..., X_0) = P(X_{n+1} | X_n)\)</li>
  <li><strong>Transition Matrix / Ma trận chuyển trạng thái</strong>: Describes the probabilities of moving from one state to another.<br />
<em>Mô tả xác suất chuyển từ trạng thái này sang trạng thái khác.</em></li>
  <li><strong>Equilibrium / Trạng thái cân bằng</strong>: After a sufficiently large number of steps, the probability distribution of the states converges to a stable distribution.<br />
<em>Sau một số bước đủ lớn, phân phối xác suất của trạng thái hội tụ về một phân phối ổn định, không thay đổi qua các bước tiếp theo.</em></li>
</ul>

<hr />

<h2 id="2-monte-carlo-method-phương-pháp-monte-carlo">2. Monte Carlo Method (Phương pháp Monte Carlo)</h2>

<p>Monte Carlo methods are a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results.<br />
<em>Phương pháp Monte Carlo là một nhóm các thuật toán tính toán dựa vào việc lấy mẫu ngẫu nhiên lặp lại để thu được các kết quả số.</em></p>

<ul>
  <li><strong>Principle / Nguyên lý</strong>: Use randomness to solve problems that might be deterministic in principle.<br />
<em>Sử dụng tính ngẫu nhiên để giải quyết các bài toán có thể xác định (deterministic) về nguyên tắc.</em></li>
  <li><strong>Law of Large Numbers / Quy luật số lớn</strong>: As the number of samples increases, the sample mean converges to the true expected value.<br />
<em>Khi số lượng mẫu thử nghiệm tăng lên, kết quả trung bình của mẫu sẽ hội tụ về giá trị kỳ vọng thực sự.</em></li>
</ul>

<hr />

<h2 id="3-bayesian-inference-suy-luận-bayesian">3. Bayesian Inference (Suy luận Bayesian)</h2>

<p>Bayesian inference is a method of statistical inference in which Bayes’ theorem is used to update the probability for a hypothesis as more evidence or information becomes available.<br />
<em>Suy luận Bayes là phương pháp thống kê trong đó xác suất được sử dụng để định lượng sự không chắc chắn. Định lý Bayes cập nhật xác suất cho một giả thuyết khi có thêm bằng chứng hoặc thông tin mới.</em></p>

\[P(\theta | D) = \frac{P(D | \theta) P(\theta)}{P(D)}\]

<p>Where / Trong đó:</p>
<ul>
  <li>\(P(\theta \mid D)\): <strong>Posterior</strong> - Probability of parameter \(\theta\) given data \(D\). (<em>Xác suất của tham số \(\theta\) khi đã biết dữ liệu \(D\).</em>)</li>
  <li>\(P(D \mid \theta)\): <strong>Likelihood</strong> - Probability of observing data \(D\) given parameter \(\theta\). (<em>Xác suất quan sát dữ liệu \(D\) nếu tham số là \(\theta\).</em>)</li>
  <li>\(P(\theta)\): <strong>Prior</strong> - Initial belief about \(\theta\) before seeing data. (<em>Niềm tin ban đầu về \(\theta\) trước khi thấy dữ liệu.</em>)</li>
  <li>\(P(D)\): <strong>Evidence</strong> - Normalizing constant. (<em>Hằng số chuẩn hóa, thường rất khó tính toán trực tiếp trong không gian nhiều chiều.</em>)</li>
</ul>

<hr />

<h2 id="4-markov-chain-monte-carlo-mcmc">4. Markov Chain Monte Carlo (MCMC)</h2>

<h3 id="why-mcmc--tại-sao-cần-mcmc">Why MCMC? / Tại sao cần MCMC?</h3>
<p>In Bayesian statistics, calculating the posterior distribution \(P(\theta | D)\) directly is often difficult because the denominator \(P(D)\) requires integration over the entire parameter space.<br />
<em>Trong thống kê Bayes, việc tính toán trực tiếp phân phối hậu nghiệm \(P(\theta | D)\) thường gặp khó khăn do mẫu số \(P(D)\) đòi hỏi tích phân qua toàn bộ không gian tham số (vốn có thể có số chiều rất lớn).</em></p>

<p>MCMC solves this by sampling from the posterior distribution without calculating the normalizing constant \(P(D)\).<br />
<em>MCMC giải quyết vấn đề này bằng cách lấy mẫu từ phân phối hậu nghiệm mà không cần tính hằng số chuẩn hóa \(P(D)\).</em></p>

<h3 id="how-it-works--cách-thức-hoạt-động">How it works / Cách thức hoạt động</h3>
<p>MCMC combines two methods:<br />
<em>MCMC kết hợp hai phương pháp:</em></p>
<ol>
  <li><strong>Monte Carlo</strong>: Random sampling to estimate the distribution. (<em>Lấy mẫu ngẫu nhiên để ước lượng phân phối.</em>)</li>
  <li><strong>Markov Chain</strong>: Generating dependent samples such that the limiting distribution is the target distribution. (<em>Tạo ra các mẫu phụ thuộc nhau sao cho phân phối giới hạn của chuỗi chính là phân phối mục tiêu.</em>)</li>
</ol>

<p>In other words, we design a “robot” that jumps randomly in the parameter space. The robot tends to stay longer in high-probability regions and visits low-probability regions less often.<br />
<em>Hay nói cách khác, ta thiết kế một “con robot” nhảy ngẫu nhiên trong không gian tham số. Con robot có xu hướng ở lại lâu hơn tại những vùng có xác suất cao và ít ghé thăm những vùng có xác suất thấp. Dấu vết bước chân của robot chính là các mẫu từ phân phối cần tìm.</em></p>

<h3 id="common-algorithms--các-thuật-toán-phổ-biến">Common Algorithms / Các thuật toán phổ biến</h3>
<ol>
  <li><strong>Metropolis-Hastings (MH)</strong>: General algorithm, proposes jumps and accepts/rejects based on probability density ratio.<br />
<em>Thuật toán tổng quát, đề xuất bước nhảy và chấp nhận/từ chối dựa trên tỷ lệ mật độ xác suất.</em></li>
  <li><strong>Gibbs Sampling</strong>: Special case of MH, updates one variable at a time while fixing others.<br />
<em>Trường hợp đặc biệt của MH, cập nhật từng biến một khi cố định các biến khác.</em></li>
  <li><strong>Hamiltonian Monte Carlo (HMC) / NUTS</strong>: Uses gradients to propose more efficient jumps (used in Stan, PyMC3).<br />
<em>Sử dụng đạo hàm (gradient) của hàm mật độ để đề xuất các bước nhảy hiệu quả hơn (Thường được dùng trong Stan, PyMC3).</em></li>
  <li><strong>Affine Invariant Ensemble Sampler (emcee)</strong>: Uses multiple “walkers” in parallel, efficient for skewed distributions.<br />
<em>Sử dụng nhiều “walkers” song song, hiệu quả cho các phân phối méo mó.</em></li>
</ol>

<hr />

<h2 id="5-practical-applications--ứng-dụng-thực-tế">5. Practical Applications / Ứng dụng thực tế</h2>

<h3 id="civil-engineering--project-management--kỹ-thuật-xây-dựng--quản-lý-dự-án">Civil Engineering &amp; Project Management / Kỹ thuật Xây dựng &amp; Quản lý Dự án</h3>
<ul>
  <li><strong>Project Risk Analysis</strong>: Simulating project completion time (PERT/CPM) when task durations are random variables. MCMC estimates the probability of deadline overrun.<br />
<em>Phân tích rủi ro dự án: Mô phỏng thời gian hoàn thành dự án (PERT/CPM) khi thời gian từng tác vụ là biến ngẫu nhiên. MCMC giúp ước lượng phân phối xác suất của ngày hoàn thành.</em></li>
  <li><strong>Structural Reliability</strong>: Assessment of structural failure probability under random loads (wind, earthquake) and uncertain material properties.<br />
<em>Độ tin cậy kết cấu: Đánh giá xác suất phá hủy của kết cấu chịu tải trọng ngẫu nhiên (gió, động đất) và đặc trưng vật liệu không chắc chắn.</em></li>
  <li><strong>Design Optimization</strong>: Finding optimal design parameters in complex spaces.<br />
<em>Tối ưu hóa thiết kế: Tìm kiếm các tham số thiết kế tối ưu trong không gian phức tạp.</em></li>
</ul>

<h3 id="finance-economics--investment--tài-chính-kinh-tế--đầu-tư">Finance, Economics &amp; Investment / Tài chính, Kinh tế &amp; Đầu tư</h3>
<ul>
  <li><strong>Portfolio Optimization</strong>: Estimating profit and risk distribution (VaR - Value at Risk). MCMC allows modeling of non-normal fat-tailed return distributions.<br />
<em>Danh mục đầu tư: Ước lượng phân phối lợi nhuận và rủi ro (VaR). MCMC cho phép mô hình hóa các phân phối lợi nhuận đuôi dày (fat-tailed) phi chuẩn, thực tế hơn so với giả định phân phối chuẩn truyền thống.</em></li>
  <li><strong>Stochastic Volatility</strong>: Forecasting asset price volatility, options pricing.<br />
<em>Mô hình hóa biến động: Dự báo biến động giá tài sản, định giá quyền chọn.</em></li>
  <li><strong>Algorithmic Trading</strong>: Detecting regime switching to adjust automated trading strategies.<br />
<em>Giao dịch thuật toán: Phát hiện sự thay đổi chế độ thị trường (regime switching models) để điều chỉnh chiến lược giao dịch tự động.</em></li>
</ul>

<hr />

<h2 id="6-simulation-summary-tóm-tắt-tính-toán-mô-phỏng">6. Simulation Summary (Tóm tắt tính toán Mô phỏng)</h2>

<p>This section summarizes a simple Metropolis-Hastings implementation to fit a linear model (\(y = mx + c\)) to noisy data.<br />
<em>Phần này tóm tắt quá trình thực hiện thuật toán Metropolis-Hastings đơn giản để khớp mô hình đường thẳng (\(y = mx + c\)) vào dữ liệu nhiễu.</em></p>

<h3 id="61-synthetic-data--dữ-liệu-giả-định">6.1. Synthetic Data / Dữ liệu giả định</h3>
<p>Data generated with 30 points and error bars representing measurement uncertainty (\(\sigma=1\)).<br />
<em>Dữ liệu được tạo ra với 30 điểm. Các thanh sai số thể hiện độ không đảm bảo đo (\(\sigma=1\)).</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_1_data.png" alt="Synthetic Data" />
  <figcaption>Synthetic Data generated with noise.</figcaption>
</figure>

<h3 id="62-chains--quá-trình-chạy-chuỗi">6.2. Chains / Quá trình chạy chuỗi</h3>
<p>The algorithm typically runs for 100,000 steps. The trace plot shows the value of <code class="language-plaintext highlighter-rouge">Slope</code> and <code class="language-plaintext highlighter-rouge">Intercept</code> over iterations.<br />
<em>Thuật toán chạy 100,000 bước. Biểu đồ Trace plot cho thấy giá trị của <code class="language-plaintext highlighter-rouge">Slope</code> và <code class="language-plaintext highlighter-rouge">Intercept</code> qua các bước lặp.</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_2_chains.png" alt="MCMC Chains" />
  <figcaption>Trace plots for Slope and Intercept.</figcaption>
</figure>

<h3 id="63-posterior-distributions--phân-phối-hậu-nghiệm">6.3. Posterior Distributions / Phân phối Hậu nghiệm</h3>
<p>After removing the burn-in period, we obtain histograms of the parameters.<br />
<em>Sau khi loại bỏ giai đoạn đầu (burn-in), ta thu được phân phối tần suất (Histogram) của các tham số.</em></p>

<ul>
  <li><strong>Estimated Results / Kết quả ước lượng</strong>:
    <ul>
      <li>Slope: ~1.40 (True: 1.5)</li>
      <li>Intercept: ~4.29 (True: 4.0)</li>
    </ul>
  </li>
</ul>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_3_histograms.png" alt="Histograms" />
  <figcaption>Posterior histograms.</figcaption>
</figure>

<h3 id="64-correlation--tương-quan-tham-số">6.4. Correlation / Tương quan tham số</h3>
<p>Scatter plot showing dependence between <code class="language-plaintext highlighter-rouge">Slope</code> and <code class="language-plaintext highlighter-rouge">Intercept</code>. Negative correlation is observed.<br />
<em>Biểu đồ phân tán cho thấy sự phụ thuộc giữa <code class="language-plaintext highlighter-rouge">Slope</code> và <code class="language-plaintext highlighter-rouge">Intercept</code>. Có sự tương quan âm: khi độ dốc tăng, hệ số chặn có xu hướng giảm.</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_4_correlation.png" alt="Correlation" />
  <figcaption>Parameter correlation.</figcaption>
</figure>

<h3 id="65-corner-plot">6.5. Corner Plot</h3>
<p>Corner plot showing marginal distributions on the diagonal and joint distributions off-diagonal.<br />
<em>Biểu đồ “Corner” thể hiện đồng thời phân phối biên trên đường chéo và phân phối đồng thời ngoài đường chéo.</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_5_corner.png" alt="Corner Plot" />
  <figcaption>Corner plot using corner.py.</figcaption>
</figure>

<h3 id="66-best-fit--kết-quả-khớp-mô-hình">6.6. Best Fit / Kết quả Khớp mô hình</h3>
<p>The line with the highest Likelihood is plotted over the data.<br />
<em>Đường thẳng từ bộ tham số có Likelihood cao nhất được vẽ chồng lên dữ liệu.</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_6_bestfit.png" alt="Best Fit" />
  <figcaption>Best-fit model.</figcaption>
</figure>

<h3 id="67-model-uncertainty--độ-không-đảm-bảo-của-mô-hình">6.7. Model Uncertainty / Độ không đảm bảo của mô hình</h3>
<p>Visualizing a sample of lines from the MCMC chain reveals the model uncertainty.<br />
<em>Bằng cách vẽ ngẫu nhiên 100 đường thẳng từ chuỗi MCMC, ta hình dung được độ không chắc chắn của mô hình.</em></p>

<figure>
  <img src="/assets/images/posts/2026-02-06-markov-chain-MC/mcmc_7_uncertainty.png" alt="Uncertainty" />
  <figcaption>Model uncertainty vizualization.</figcaption>
</figure>

<hr />

<h2 id="references--tài-liệu-tham-khảo">References / Tài liệu tham khảo</h2>
<ol>
  <li><strong>Wikipedia - Markov chain Monte Carlo</strong>: <a href="https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo">https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo</a></li>
  <li><strong>Stanford CS109 - Mathematical Foundations</strong>: <a href="https://web.stanford.edu/class/archive/cs/cs109/cs109.1218/files/student_drive/9.6.pdf">https://web.stanford.edu/class/archive/cs/cs109/cs109.1218/files/student_drive/9.6.pdf</a></li>
</ol>]]></content><author><name>Hydro Structure AI</name></author><category term="Data Science" /><category term="Algorithms" /><category term="Engineering" /><category term="MCMC" /><category term="Monte Carlo" /><category term="Bayesian Statistics" /><category term="Python" /><category term="Algorithm" /><summary type="html"><![CDATA[Markov Chain Monte Carlo (MCMC) is a powerful class of algorithms for sampling from probability distributions. By constructing a Markov chain that has the desired distribution as its equilibrium distribution, one can obtain a sample of the desired distribution to approximate complex integrals or understand posterior distributions in Bayesian statistics. Markov Chain Monte Carlo (MCMC) là một lớp các thuật toán lấy mẫu từ phân phối xác suất. Bằng cách xây dựng một chuỗi Markov có phân phối cân bằng (equilibrium distribution) mong muốn, ta có thể lấy mẫu từ phân phối đó để xấp xỉ các tích phân phức tạp hoặc hiểu rõ hơn về tính chất của phân phối hậu nghiệm (posterior) trong thống kê Bayes.]]></summary></entry><entry><title type="html">Pycivile: Open Source Structural Engineering Library &amp;amp; BIM Integration Strategy</title><link href="https://hydrostructai.github.io/structural%20engineering/python/bim/ung-dung-pycivil/" rel="alternate" type="text/html" title="Pycivile: Open Source Structural Engineering Library &amp;amp; BIM Integration Strategy" /><published>2026-02-03T08:00:00+07:00</published><updated>2026-02-03T08:00:00+07:00</updated><id>https://hydrostructai.github.io/structural%20engineering/python/bim/ung-dung-pycivil</id><content type="html" xml:base="https://hydrostructai.github.io/structural%20engineering/python/bim/ung-dung-pycivil/"><![CDATA[<p>Pycivile is an open-source Python library designed to liberate structural engineers from dependency on commercial software while preserving professional knowledge.<br />
<em>Pycivile là một thư viện Python mã nguồn mở được thiết kế để giải phóng kỹ sư kết cấu khỏi sự phụ thuộc vào các phần mềm thương mại trong khi vẫn lưu giữ được tri thức chuyên môn.</em></p>

<p>This article provides an in-depth technical analysis of Pycivile tailored for structural engineers and BIM developers.<br />
<em>Bài viết này cung cấp một phân tích kỹ thuật chuyên sâu về Pycivile được biên soạn dành riêng cho các kỹ sư kết cấu và lập trình viên BIM.</em></p>

<h2 id="1-overview--objectives--tổng-quan--mục-tiêu">1. Overview &amp; Objectives / Tổng Quan &amp; Mục Tiêu</h2>

<h3 id="core-philosophy--triết-lý-cốt-lõi">Core Philosophy / Triết Lý Cốt Lõi</h3>
<p>In the modern AEC industry, engineering knowledge is often locked behind proprietary binary file formats of commercial software like ETABS, SAP2000, or Robot.<br />
<em>Trong ngành AEC hiện đại, tri thức kỹ thuật thường bị khóa chặt đằng sau các định dạng file nhị phân độc quyền của các phần mềm thương mại như ETABS, SAP2000 hay Robot.</em></p>

<p>Pycivile aims to create a “middleware” layer that standardizes structural data using open formats (JSON/BSON) and Python classes, ensuring that the engineering logic remains accessible and reusable.<br />
<em>Pycivile hướng tới việc tạo ra một lớp “phần mềm trung gian” giúp chuẩn hóa dữ liệu kết cấu sử dụng các định dạng mở (JSON/BSON) và các lớp đối tượng Python, đảm bảo logic kỹ thuật luôn có thể truy cập và tái sử dụng.</em></p>

<h3 id="key-objectives--các-mục-tiêu-chính">Key Objectives / Các Mục Tiêu Chính</h3>
<ol>
  <li><strong>Freedom from Licensing:</strong> Reduce costs for small firms and freelancers.<br />
<em>Tự do khỏi bản quyền: Giảm thiểu chi phí cho các công ty nhỏ và kỹ sư tự do.</em></li>
  <li><strong>Knowledge Preservation:</strong> Code-based rules (EC2, NTC2018) are transparent rather than “black boxes”.<br />
<em>Lưu giữ tri thức: Các quy tắc theo tiêu chuẩn (EC2, NTC2018) được minh bạch hóa thay vì là những hộp đen (có phí).</em></li>
  <li><strong>Automation &amp; Batch Processing:</strong> Calculate thousands of elements in seconds using Python scripts.<br />
<em>Tự động hóa &amp; Xử lý hàng loạt: Tính toán hàng ngàn cấu kiện trong vài giây bằng các script Python.</em></li>
</ol>

<hr />

<h2 id="2-technical-features--tính-năng-kỹ-thuật">2. Technical Features / Tính Năng Kỹ Thuật</h2>

<p>Checking the source code structure reveals a robust architecture divided into specific domains.<br />
<em>Kiểm tra cấu trúc mã nguồn cho thấy một kiến trúc vững chắc được chia thành các lĩnh vực cụ thể.</em></p>

<h3 id="21-exageometry-computational-geometry--hình-học-tính-toán">2.1. EXAGeometry: Computational Geometry / Hình Học Tính Toán</h3>
<p>Before performing structural analysis, we need to handle spatial data. Pycivile provides:<br />
<em>Trước khi thực hiện phân tích kết cấu, chúng ta cần xử lý dữ liệu không gian. Pycivile cung cấp:</em></p>

<ul>
  <li><strong>Primitives:</strong> <code class="language-plaintext highlighter-rouge">Point3d</code>, <code class="language-plaintext highlighter-rouge">Vector3d</code>, <code class="language-plaintext highlighter-rouge">Polyline3d</code> for defining complex structural shapes.<br />
<em>Các nguyên thủy: <code class="language-plaintext highlighter-rouge">Point3d</code>, <code class="language-plaintext highlighter-rouge">Vector3d</code>, <code class="language-plaintext highlighter-rouge">Polyline3d</code> để định nghĩa các hình dạng kết cấu phức tạp.</em></li>
  <li><strong>Mesh Generation:</strong> Integration with <code class="language-plaintext highlighter-rouge">GMSH</code> via OpenCASCADE kernel allows automatic meshing of foundations or slabs from architectural boundary nodes.<br />
<em>Tạo lưới phần tử: Tích hợp với <code class="language-plaintext highlighter-rouge">GMSH</code> thông qua nhân OpenCASCADE cho phép tự động chia lưới móng hoặc bản sàn từ các nút biên kiến trúc.</em></li>
</ul>

<h3 id="22-exastructural-the-core-engine--bộ-máy-cốt-lõi">2.2. EXAStructural: The Core Engine / Bộ Máy Cốt Lõi</h3>
<p>This module handles the physics and engineering rules.<br />
<em>Mô-đun này xử lý các quy tắc vật lý và kỹ thuật.</em></p>

<ul>
  <li><strong>RC Section Analysis:</strong> It uses fiber discretization or stress block methods to check Reinforced Concrete sections (Rectangular, T-shape, I-shape, generic polygons).<br />
<em>Phân tích tiết diện BTCT: Sử dụng phương pháp chia thớ hoặc khối ứng suất để kiểm tra tiết diện Bê tông cốt thép (Chữ nhật, Chữ T, Chữ I, đa giác bất kỳ).</em></li>
  <li><strong>Interaction Diagrams:</strong> It generates 2D (P-M) and 3D (P-Mx-My) interaction domains for ULS verification.<br />
<em>Biểu đồ tương tác: Tạo các miền tương tác 2D (P-M) và 3D (P-Mx-My) để kiểm tra trạng thái giới hạn cực hạn (ULS).</em></li>
  <li><strong>Code Implementation:</strong> Built-in classes for <strong>Eurocode 2</strong> and <strong>NTC2018</strong> (Italian Standards), handling material safety factors and load combinations.<br />
<em>Triển khai tiêu chuẩn: Tích hợp sẵn các lớp cho <strong>Eurocode 2</strong> và <strong>NTC2018</strong>, xử lý các hệ số an toàn vật liệu và tổ hợp tải trọng.</em></li>
</ul>

<h3 id="23-interoperability--fem--khả-năng-tương-tác--fem">2.3. Interoperability &amp; FEM / Khả Năng Tương Tác &amp; FEM</h3>
<p>Pycivile is not just a calculator; it is a bridge.<br />
<em>Pycivile không chỉ là một máy tính; nó là một cây cầu nối.</em></p>

<ul>
  <li><strong>MIDAS Gen Export:</strong> Uses Jinja2 templates to generate <code class="language-plaintext highlighter-rouge">.mgt</code> text files, allowing script-based model generation.<br />
<em>Xuất sang MIDAS Gen: Sử dụng Jinja2 templates để tạo file văn bản <code class="language-plaintext highlighter-rouge">.mgt</code>, cho phép tạo mô hình bằng mã lệnh.</em></li>
  <li><strong>Code_Aster Integration:</strong> Connects with the powerful open-source FEM solver Code_Aster for non-linear analysis.<br />
<em>Tích hợp Code_Aster: Kết nối với bộ giải FEM mã nguồn mở mạnh mẽ Code_Aster cho các phân tích phi tuyến.</em></li>
  <li><strong>VTK Visualization:</strong> Visualizes 3D results (stress contours, deformation) directly in Python.<br />
<em>Trực quan hóa VTK: Hiển thị kết quả 3D (đường đồng mức ứng suất, biến dạng) trực tiếp trong Python.</em></li>
</ul>

<hr />

<h2 id="3-bim-integration-present--future--tích-hợp-bim-hiện-tại--tương-lai">3. BIM Integration: Present &amp; Future / Tích Hợp BIM: Hiện Tại &amp; Tương Lai</h2>

<p>BIM (Building Information Modeling) is shifting from “Drawing” to “Data Management”. Pycivile aligns perfectly with this trend.<br />
<em>BIM đang chuyển dịch từ “ngôn ngữ” bản vẽ sang “Quản lý dữ liệu”. Pycivile phù hợp hoàn hảo với xu hướng này.</em></p>

<h3 id="31-current-workflow-geometry-to-analysis--quy-trình-hiện-tại-từ-hình-học-đến-phân-tích">3.1. Current Workflow: Geometry to Analysis / Quy Trình Hiện Tại: Từ Hình Học đến Phân Tích</h3>
<p>Currently, Pycivile acts as a processor for geometric data imported from BIM software.<br />
<em>Hiện tại, Pycivile đóng vai trò là bộ xử lý cho dữ liệu hình học được nhập từ phần mềm BIM.</em></p>

<ol>
  <li><strong>Extract Data:</strong> Nodes and element connectivity are extracted from IFC or CAD files using libraries like <code class="language-plaintext highlighter-rouge">ifcopenshell</code> or <code class="language-plaintext highlighter-rouge">ezdxf</code> (external dependencies).<br />
<em>Trích xuất dữ liệu: Nút và liên kết phần tử được trích xuất từ file IFC hoặc CAD sử dụng các thư viện như <code class="language-plaintext highlighter-rouge">ifcopenshell</code> hoặc <code class="language-plaintext highlighter-rouge">ezdxf</code>.</em></li>
  <li><strong>Process in Pycivile:</strong><br />
<em>Xử lý trong Pycivile:</em>
    <ul>
      <li>Map geometric sections to <code class="language-plaintext highlighter-rouge">EXAStructural</code> objects.<br />
<em>Ánh xạ tiết diện hình học sang đối tượng <code class="language-plaintext highlighter-rouge">EXAStructural</code>.</em></li>
      <li>Assign material properties (<code class="language-plaintext highlighter-rouge">Concrete</code>, <code class="language-plaintext highlighter-rouge">Steel</code>).<br />
<em>Gán đặc trưng vật liệu (<code class="language-plaintext highlighter-rouge">Concrete</code>, <code class="language-plaintext highlighter-rouge">Steel</code>).</em></li>
      <li>Generate FE mesh via <code class="language-plaintext highlighter-rouge">GMSH</code> wrapper.<br />
<em>Tạo lưới phần tử hữu hạn thông qua lớp bọc <code class="language-plaintext highlighter-rouge">GMSH</code>.</em></li>
    </ul>
  </li>
  <li><strong>FEM Export:</strong> A <code class="language-plaintext highlighter-rouge">.mgt</code> or Code_Aster command file is generated for solving.<br />
<em>Xuất FEM: Một file lệnh <code class="language-plaintext highlighter-rouge">.mgt</code> hoặc Code_Aster được tạo ra để giải.</em></li>
</ol>

<h3 id="32-future-vision-the-headless-engine--tầm-nhìn-tương-lai-bộ-máy-không-giao-diện">3.2. Future Vision: The “Headless” Engine / Tầm Nhìn Tương Lai: Bộ Máy “Không Giao Diện”</h3>
<p>The future of structural BIM lies in “Generative Design” and “Real-time Verification”.<br />
<em>Tương lai của BIM kết cấu nằm ở “Thiết kế phát sinh” và “Kiểm tra thời gian thực”.</em></p>

<ul>
  <li><strong>CDE Integration:</strong> With <code class="language-plaintext highlighter-rouge">DbManager</code> (MongoDB), Pycivile can serve as the backend for a Common Data Environment, where changes in the architectural model automatically trigger structural checks stored in the database.<br />
<em>Tích hợp CDE: Với <code class="language-plaintext highlighter-rouge">DbManager</code> (MongoDB), Pycivile có thể đóng vai trò backend cho Môi trường Dữ liệu Chung, nơi các thay đổi trong mô hình kiến trúc tự động kích hoạt các kiểm tra kết cấu được lưu trong cơ sở dữ liệu.</em></li>
  <li><strong>AI-Driven Optimization:</strong> By exposing structural logic as Python functions, we can easily wrap Pycivile in optimization loops (Genetic Algorithms) to minimize material usage while satisfying ULS constraints.<br />
<em>Tối ưu hóa bằng AI: Bằng cách phơi bày logic kết cấu dưới dạng hàm Python, ta có thể dễ dàng bọc Pycivile trong các vòng lặp tối ưu hóa (Giải thuật Di truyền) để giảm thiểu vật liệu trong khi vẫn thỏa mãn điều kiện ULS.</em></li>
</ul>

<hr />

<h2 id="4-pros--cons--ưu-điểm--hạn-chế">4. Pros &amp; Cons / Ưu Điểm &amp; Hạn Chế</h2>

<h3 id="41-advantages--ưu-điểm">4.1. Advantages / Ưu Điểm</h3>
<ul>
  <li><strong>Transparency:</strong> You can verify exactly how a safety factor is applied by reading the code.<br />
<em>Bạn có thể kiểm chứng chính xác cách một hệ số an toàn được áp dụng bằng cách đọc mã nguồn.</em></li>
  <li><strong>Extensibility:</strong> Adding a new material (e.g., Fiber Reinforced Concrete) is as simple as subclassing a Python object.<br />
<em>Khả năng mở rộng: Việc thêm một vật liệu mới (ví dụ: Bê tông cốt sợi) đơn giản chỉ là tạo lớp con cho một đối tượng Python.</em></li>
  <li><strong>Cost-Effective:</strong> Zero licensing fees, runs on Linux servers or Docker containers.<br />
<em>Hiệu quả chi phí: Không phí bản quyền, chạy tốt trên máy chủ Linux hoặc container Docker.</em></li>
</ul>

<h3 id="42-limitations--hạn-chế">4.2. Limitations / Hạn Chế</h3>
<ul>
  <li><strong>Learning Curve:</strong> Requires Python programming skills + Structural Engineering knowledge. No graphical interface (GUI).<br />
<em>Đường cong học tập: Yêu cầu kỹ năng lập trình Python + Kiến thức Kỹ thuật Kết cấu. Không có giao diện đồ họa (GUI).</em></li>
  <li><strong>Code Coverage:</strong> Currently focuses heavily on Eurocodes (EC2) and Italian NTC. Implementing TCVN (Vietnam Standards) requires manual effort.<br />
<em>Độ phủ tiêu chuẩn: Hiện tại tập trung nhiều vào Eurocodes (EC2) và NTC của Ý. Việc triển khai TCVN (Tiêu chuẩn Việt Nam) đòi hỏi công sức thủ công.</em></li>
  <li><strong>Solver Speed:</strong> Pure Python solvers for large FE models are slower than C++ commercial solvers (though integration with Code_Aster solves this).<br />
<em>Tốc độ giải: Các bộ giải thuần Python cho mô hình phần tử hữu hạn lớn sẽ chậm hơn bộ giải thương mại viết bằng C++ (mặc dù việc tích hợp Code_Aster giải quyết được vấn đề này).</em></li>
</ul>

<hr />

<h2 id="5-conclusion--kết-luận">5. Conclusion / Kết Luận</h2>

<p>Pycivile is a paradigm shift from “User of Software” to “Developer of Solutions”.<br />
<em>Pycivile là bước chuyển dịch tư duy từ “dùng phần mềm” sang “phát triển giải pháp”.</em></p>

<p>For Vietnamese engineers, adopting frameworks like Pycivile opens the door to deeply understanding structural behavior and automating the tedious parts of design according to TCVN standards. It is a stepping stone towards mastering Computational Engineering.<br />
<em>Đối với các kỹ sư Việt Nam, việc áp dụng các thư viện như Pycivile mở ra cánh cửa để thấu hiểu sâu sắc hành vi kết cấu và tự động hóa những phần tẻ nhạt của thiết kế theo tiêu chuẩn TCVN. Đây là bước đệm để làm chủ Kỹ thuật tính toán trong xây dựng (Computational Engineering).</em></p>

<p><strong>Reference / Tài liệu tham khảo:</strong><br />
<a href="https://gitlab.com/luigi_paone/Pycivilee">GitLab: Pycivilee Repository</a></p>]]></content><author><name>Hydro Structure AI</name></author><category term="Structural Engineering" /><category term="Python" /><category term="BIM" /><category term="Pycivile" /><category term="Python" /><category term="Finite Element Method" /><category term="BIM Integration" /><category term="Open Source" /><summary type="html"><![CDATA[Pycivile is an open-source Python library designed to liberate structural engineers from dependency on commercial software while preserving professional knowledge. Pycivile là một thư viện Python mã nguồn mở được thiết kế để giải phóng kỹ sư kết cấu khỏi sự phụ thuộc vào các phần mềm thương mại trong khi vẫn lưu giữ được tri thức chuyên môn.]]></summary></entry><entry><title type="html">Quản lý dự án xây dựng: Từ quy trình cứng đến tư duy PMBOK 7th</title><link href="https://hydrostructai.github.io/project%20management/construction%20laws/pmp-qlda/" rel="alternate" type="text/html" title="Quản lý dự án xây dựng: Từ quy trình cứng đến tư duy PMBOK 7th" /><published>2026-01-26T10:00:00+07:00</published><updated>2026-01-26T10:00:00+07:00</updated><id>https://hydrostructai.github.io/project%20management/construction%20laws/pmp-qlda</id><content type="html" xml:base="https://hydrostructai.github.io/project%20management/construction%20laws/pmp-qlda/"><![CDATA[<p>Ngành xây dựng đang chứng kiến sự chuyển dịch mạnh mẽ từ quản lý dựa trên quy trình (Process-based) sang quản lý dựa trên nguyên tắc và hiệu suất (Principle &amp; Performance-based). Bài viết này sẽ phân tích tài liệu <em>“Tiến trình Quản lý Dự án &amp; Soạn thảo Quy trình”</em> dưới lăng kính của <strong>PMBOK Guide 7th Edition</strong>, đồng thời đối chiếu với khung pháp lý mới nhất của Việt Nam (Nghị định 175/2024/NĐ-CP).</p>

<p>Bài viết tập trung vào phân tích <strong>Tư duy quản trị (Mindset)</strong>.</p>

<hr />

<h2 id="1-pmbok-7th-edition-sự-chuyển-dịch-tư-duy">1. PMBOK 7th Edition: Sự chuyển dịch tư duy</h2>

<p>Khác với PMBOK 6th tập trung vào 5 nhóm quy trình (Initiating, Planning, Executing, Monitoring, Closing), phiên bản thứ 7 (PMBOK 7th) tái cấu trúc quản trị dự án xoay quanh <strong>Hệ thống chuyển giao giá trị (Value Delivery System)</strong>. Đối với một dự án xây dựng, điều này có nghĩa là mục tiêu cuối cùng không chỉ là “hoàn thành công trình đúng hạn” (Output) mà là “công trình đi vào vận hành mang lại lợi ích gì” (Outcome).</p>

<p>Tư duy này được xây dựng trên <strong>12 Nguyên tắc (Principles)</strong> và <strong>8 Lĩnh vực hiệu suất (Performance Domains)</strong>. Bài viết sẽ dựa vào cơ sở này để phân tích tài liệu quản lý dự án truyền thống.</p>

<hr />

<h2 id="2-phân-tích-tài-liệu-tham-khảo">2. Phân tích tài liệu tham khảo:</h2>

<p>Bài viết tham khảo tài liệu của tác giả Lê Huệ về <em>“Tiến trình quản lý dự án”</em> và  phân tích chuyên sâu dựa trên các tiêu chuẩn của PMBOK 7th.</p>

<h3 id="21-những-điểm-đáp-ứng">2.1. Những điểm đáp ứng</h3>

<p>Đây là một mẫu mực của phương pháp <strong>Waterfall</strong> và <strong>Predictive Approach (Cách tiếp cận dự báo)</strong>, rất phù hợp với đặc thù cứng nhắc của ngành xây dựng:</p>

<ol>
  <li><strong>Lĩnh vực lập kế hoạch (Planning Domain):</strong>
    <ul>
      <li>Tài liệu thiết lập một lộ trình tuyến tính rõ ràng từ <em>Chủ trương đầu tư -&gt; GPMB -&gt; Thi công -&gt; Quyết toán</em>.</li>
      <li>Đáp ứng tốt nguyên tắc quản lý sự phức tạp bằng cách phân rã dự án thành 28 quy trình nhỏ, dễ kiểm soát.</li>
    </ul>
  </li>
  <li><strong>Lĩnh vực chuyển giao (Delivery Domain):</strong>
    <ul>
      <li>Tập trung mạnh vào quản lý chất lượng (QA/QC) thông qua các biểu mẫu, checklist nghiệm thu. Điều này phù hợp với yêu cầu về sự tuân thủ, yếu tố sống còn trong xây dựng.</li>
    </ul>
  </li>
  <li><strong>Nguyên tắc tùy chỉnh (Tailoring):</strong>
    <ul>
      <li>Dù là tài liệu cũ, nhưng nó đã thực hiện tốt nguyên tắc <em>Tailoring</em> khi vận dụng các kiến thức quốc tế vào môi trường pháp lý Việt Nam, cụ thể hóa các bước theo luật định.</li>
    </ul>
  </li>
</ol>

<h3 id="22-những-điểm-chưa-đáp-ứng-và-cần-tinh-chỉnh">2.2. Những điểm chưa đáp ứng và cần tinh chỉnh</h3>

<p>Theo tư duy PMBOK 7th thì tài liệu này bộc lộ những hạn chế cần được bổ sung bởi người quản lý dự án hiện đại:</p>

<ol>
  <li><strong>Thiếu vắng tư duy hệ thống (Systems Thinking):</strong>
    <ul>
      <li>Còn tập trung nhiều vào các “silos” (các phòng ban/quy trình riêng lẻ) mà chưa nhấn mạnh sự tương tác động giữa các yếu tố. Ví dụ: Sự thay đổi trong quy trình GPMB ảnh hưởng thế nào đến dòng tiền và rủi ro pháp lý tổng thể?</li>
      <li><em>Giải pháp:</em> Cần tích hợp cơ chế phản hồi (Feedback loops) giữa các quy trình thay vì chỉ chạy một chiều.</li>
    </ul>
  </li>
  <li><strong>Khoảng trống về “Team” và “Stakeholders”:</strong>
    <ul>
      <li>PMBOK 7th dành riêng 2 lĩnh vực cho con người. Tài liệu còn nặng về “Thủ tục” (Paperwork) nhưng nhẹ về “Kỹ năng mềm” (Soft skills), quản lý xung đột nhà thầu, và sự tham gia của các bên liên quan (địa phương, người dân).</li>
    </ul>
  </li>
  <li><strong>Quản lý sự không chắc chắn (Uncertainty &amp; Risk):</strong>
    <ul>
      <li>Tài liệu có đề cập rủi ro nhưng chủ yếu là xử lý sự cố. PMBOK 7th yêu cầu sự chủ động (Proactive) và khả năng thích ứng (Adaptability). Trong bối cảnh Nghị định 175/2024 mới, rủi ro pháp lý thay đổi rất nhanh, đòi hỏi quy trình phải linh hoạt hơn (Agile/Hybrid mindset).</li>
    </ul>
  </li>
  <li><strong>Tập trung vào Output hơn Outcome:</strong>
    <ul>
      <li>Các quy trình dừng lại ở việc “ký xong biên bản”. Tư duy mới đòi hỏi PM phải quan tâm đến việc vận hành, bảo trì và vòng đời dự án sau bàn giao (Life-cycle management).</li>
    </ul>
  </li>
</ol>

<hr />

<h2 id="3-cập-nhật-khung-pháp-lý">3. Cập nhật khung Pháp lý</h2>

<p>Một PM chuyên nghiệp tại Việt Nam không chỉ cần PMP mà còn phải am hiểu luật. Để áp dụng tài liệu đính kèm vào năm 2026, cần cập nhật các tham chiếu sau:</p>

<h3 id="31-quản-lý-dự-án-đầu-tư-nghị-định-1752024nđ-cp">3.1. Quản lý dự án đầu tư (Nghị định 175/2024/NĐ-CP)</h3>
<ul>
  <li><strong>Điểm mới trọng yếu:</strong> Nghị định 175/2024 tập trung mạnh vào việc phân cấp, phân quyền và cắt giảm thủ tục hành chính trong khâu chuẩn bị đầu tư.</li>
  <li><strong>Tác động đến quy trình:</strong> Các bước xin phép, thẩm định thiết kế cơ sở (Quy trình 01-09 trong tài liệu) cần được tinh gọn lại. PM cần rà soát lại ma trận trách nhiệm (RACI) để tận dụng các cơ chế phân quyền mới, giúp rút ngắn tiến độ pháp lý.</li>
</ul>

<h3 id="32-quản-lý-chất-lượng--bảo-trì-nghị-định-062021nđ-cp">3.2. Quản lý chất lượng &amp; bảo trì (Nghị định 06/2021/NĐ-CP)</h3>
<ul>
  <li>Quy định chặt chẽ hơn về trách nhiệm của Chủ đầu tư trong việc nghiệm thu và bàn giao đưa vào sử dụng.</li>
  <li>Yêu cầu bắt buộc về <strong>Hồ sơ hoàn thành công trình</strong> điện tử (Digital As-built documents). Đây là lúc tư duy số hóa cần được đưa vào các biểu mẫu truyền thống trong tài liệu.</li>
</ul>

<hr />

<h2 id="4-toàn-văn-tài-liệu">4. Toàn văn tài liệu</h2>

<p>Để hỗ trợ cộng đồng PM, bài viết chia sẻ toàn văn tài liệu gốc để độc giả đối chiếu và áp dụng.</p>

<!-- Cấu trúc nhúng PDF chuyên nghiệp: Tự thích ứng màn hình -->
<div class="pdf-container">
    <iframe src="https://drive.google.com/file/d/1yNNOoUrw2mTT3URReG7F12QhLGwHmU4t/preview" allow="autoplay" loading="lazy">
    </iframe>
    <div class="mobile-pdf-link">
        <p>Nếu tài liệu không hiển thị, vui lòng nhấn nút bên dưới:</p>
        <a href="https://drive.google.com/file/d/1yNNOoUrw2mTT3URReG7F12QhLGwHmU4t/view?usp=sharing" target="_blank" class="btn btn--primary">
            <i class="fas fa-file-pdf"></i> Xem toàn màn hình / Tải về
        </a>
    </div>
</div>

<style>
/* CSS cho container PDF */
.pdf-container {
    position: relative;
    width: 100%;
    /* Tỷ lệ 16:9 cho Desktop, tự giãn trên di động */
    height: 800px;
    margin: 20px 0;
    border: 1px solid #ddd;
    border-radius: 8px;
    overflow: hidden;
}

.pdf-container iframe {
    width: 100%;
    height: 100%;
    border: none;
}

/* Ẩn nút hỗ trợ trên Desktop */
.mobile-pdf-link {
    display: none;
    text-align: center;
    padding: 15px;
    background: #f9f9f9;
}

/* Tối ưu riêng cho Mobile (như Samsung A35) */
@media (max-width: 768px) {
    .pdf-container {
        height: 500px; /* Giảm chiều cao để dễ cuộn trang web */
    }
    .mobile-pdf-link {
        display: block; /* Hiển thị nút dự phòng khi iframe lỗi */
    }
}
</style>

<hr />

<h2 id="5-kết-luận">5. Kết luận</h2>

<p>Sự kết hợp giữa <strong>Cấu trúc quy trình chặt chẽ</strong> (Tài liệu đính kèm) và <strong>Tư duy linh hoạt, tập trung giá trị</strong> (PMBOK 7th) chính là chìa khóa thành công cho các dự án xây dựng hiện đại.</p>

<p>Người làm quản lý dự án giỏi không phải là người tuân thủ quy trình một cách máy móc, mà là người biết sử dụng quy trình như một công cụ để điều phối sự phức tạp, đảm bảo tính tuân thủ pháp lý (NĐ 175/2024, NĐ 06/2021) và kiến tạo giá trị thực sự cho chủ đầu tư.</p>

<p><strong>Nguồn tham khảo chuyên môn:</strong></p>
<ol>
  <li><strong>Lê Huệ, PMP.</strong> <em>Tài liệu đào tạo: Tiến trình quản lý dự án &amp; Soạn thảo quy trình</em>.</li>
  <li><strong>Project Management Institute.</strong> (2021). <em>A Guide to the Project Management Body of Knowledge (PMBOK® Guide) – Seventh Edition and The Standard for Project Management</em>.</li>
  <li><strong>Nghị định số 175/2024/NĐ-CP</strong> <em>quy định chi tiết một số điều của Luật Xây dựng và quản lý dự án đầu tư xây dựng</em> (Thay thế/Điều chỉnh các quy định cũ)*.</li>
  <li><strong>Nghị định số 06/2021/NĐ-CP</strong> <em>về quy định chi tiết một số nội dung về quản lý chất lượng, thi công xây dựng và bảo trì công trình xây dựng</em>.</li>
</ol>

<hr />]]></content><author><name>Hydro Structure AI</name></author><category term="Project Management" /><category term="Construction Laws" /><category term="PMBOK 7th" /><category term="Decree 175/2024" /><category term="Construction Management" /><category term="Value Delivery" /><category term="Decree 06/2021" /><summary type="html"><![CDATA[Ngành xây dựng đang chứng kiến sự chuyển dịch mạnh mẽ từ quản lý dựa trên quy trình (Process-based) sang quản lý dựa trên nguyên tắc và hiệu suất (Principle &amp; Performance-based). Bài viết này sẽ phân tích tài liệu “Tiến trình Quản lý Dự án &amp; Soạn thảo Quy trình” dưới lăng kính của PMBOK Guide 7th Edition, đồng thời đối chiếu với khung pháp lý mới nhất của Việt Nam (Nghị định 175/2024/NĐ-CP).]]></summary></entry><entry><title type="html">Giải thuật Quy hoạch Tuyến tính ứng dụng vào bài toán thực tế</title><link href="https://hydrostructai.github.io/optimization/data%20science/linear-program/" rel="alternate" type="text/html" title="Giải thuật Quy hoạch Tuyến tính ứng dụng vào bài toán thực tế" /><published>2026-01-23T10:00:00+07:00</published><updated>2026-01-23T10:00:00+07:00</updated><id>https://hydrostructai.github.io/optimization/data%20science/linear-program</id><content type="html" xml:base="https://hydrostructai.github.io/optimization/data%20science/linear-program/"><![CDATA[<p>Quy hoạch tuyến tính (Linear Programming - LP) là một trong những kỹ thuật tối ưu hóa quan trọng nhất trong toán học ứng dụng và kinh tế. Bài viết này sẽ giới thiệu về cơ sở toán học của LP và cách triển khai giải quyết 3 bài toán thực tế bằng thư viện SciPy trong Python.</p>

<hr />

<h2 id="1-cơ-sở-toán-học-mathematical-foundations">1. Cơ sở Toán học (Mathematical Foundations)</h2>

<h3 id="11-định-nghĩa-bài-toán">1.1. Định nghĩa bài toán</h3>
<p>Quy hoạch tuyến tính là phương pháp tối ưu hóa một hàm mục tiêu tuyến tính, thỏa mãn các ràng buộc đẳng thức hoặc bất đẳng thức tuyến tính.</p>

<p>Mô hình toán học tổng quát:</p>

\[\begin{aligned}
&amp; \text{Maximize} &amp; &amp; \mathbf{c}^\mathrm{T} \mathbf{x} \\
&amp; \text{Subject to} &amp; &amp; A \mathbf{x} \leq \mathbf{b} \\
&amp; &amp; &amp; \mathbf{x} \geq 0
\end{aligned}\]

<p>Trong đó:</p>
<ul>
  <li>\(\mathbf{x}\) : Vector biến quyết định (variables).</li>
  <li>\(\mathbf{c}\) : Vector hệ số hàm mục tiêu (objective coefficients).</li>
  <li>\(A\) : Ma trận hệ số ràng buộc (constraint matrix).</li>
  <li>\(\mathbf{b}\) : Vector giới hạn (bounds).</li>
</ul>

<h3 id="12-các-phương-pháp-giải-chính">1.2. Các Phương pháp giải chính</h3>
<ol>
  <li><strong>Simplex Method (Đơn hình):</strong> Phát triển bởi George Dantzig (1947). Giải thuật di chuyển dọc theo các cạnh của đa diện khả thi để tìm cực trị tại các đỉnh.</li>
  <li><strong>Interior Point Method (Điểm trong):</strong> Tiếp cận nghiệm tối ưu bằng cách di chuyển qua phần bên trong của vùng khả thi.</li>
  <li><strong>Branch and Bound (Nhánh và Cận):</strong> Sử dụng cho quy hoạch nguyên (MILP) khi các biến phải là số nguyên.</li>
</ol>

<hr />

<h2 id="2-mô-hình-hóa-3-bài-toán-thực-tế">2. Mô hình hóa 3 Bài toán Thực tế</h2>

<h3 id="bài-toán-1-quản-lý-sản-xuất-production-mix">Bài toán 1: Quản lý Sản xuất (Production Mix)</h3>
<p><strong>Mục tiêu:</strong> Tối đa hóa lợi nhuận từ việc sản xuất 2 loại sản phẩm \(P_1, P_2\).</p>
<ul>
  <li>Hàm mục tiêu: \(\text{Max } Z = 30x_1 + 40x_2\)</li>
  <li>Ràng buộc nguyên liệu: \(1x_1 + 2x_2 \leq 100\)</li>
  <li>Ràng buộc nhân công: \(2x_1 + 1x_2 \leq 80\)</li>
</ul>

<h3 id="bài-toán-2-vận-chuyển-transportation-problem">Bài toán 2: Vận chuyển (Transportation Problem)</h3>
<p><strong>Mục tiêu:</strong> Tối thiểu hóa chi phí vận chuyển từ 2 kho (S1, S2) đến 2 cửa hàng (D1, D2).</p>
<ul>
  <li>Cung (Supply): \(S_1=50, S_2=60\)</li>
  <li>Cầu (Demand): \(D_1=40, D_2=70\)</li>
  <li>Hàm mục tiêu: \(\text{Min } Z = 2x_{11} + 4x_{12} + 3x_{21} + 1x_{22}\)</li>
</ul>

<h3 id="bài-toán-3-quản-lý-dự-án-project-management--cpm">Bài toán 3: Quản lý Dự án (Project Management / CPM)</h3>
<p><strong>Mục tiêu:</strong> Tối thiểu hóa thời gian hoàn thành dự án gồm 3 công việc A, B, C.</p>
<ul>
  <li>A (3 ngày), B (2 ngày) làm song song; C (4 ngày) làm sau A và B.</li>
  <li>Hàm mục tiêu: \(\text{Min } T_{end}\)</li>
</ul>

<hr />

<h2 id="3-triển-khai-với-python-scipy">3. Triển khai với Python (SciPy)</h2>

<p>Để giải quyết các bài toán này, chúng ta sử dụng thư viện <code class="language-plaintext highlighter-rouge">scipy.optimize.linprog</code>.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="n">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">from</span> <span class="n">scipy.optimize</span> <span class="kn">import</span> <span class="n">linprog</span>

<span class="c1"># Cấu hình hiển thị
</span><span class="n">plt</span><span class="p">.</span><span class="n">style</span><span class="p">.</span><span class="nf">use</span><span class="p">(</span><span class="sh">'</span><span class="s">ggplot</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<h4 id="-giải-bài-toán-1-tối-ưu-hóa-sản-xuất">🛠 Giải Bài toán 1: Tối ưu hóa Sản xuất</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># SciPy tìm Min, nên đảo dấu để tìm Max: Max(Z) &lt;=&gt; Min(-Z)
</span><span class="n">c_prod</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">30</span><span class="p">,</span> <span class="o">-</span><span class="mi">40</span><span class="p">]</span>
<span class="n">A_prod</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">]]</span>
<span class="n">b_prod</span> <span class="o">=</span> <span class="p">[</span><span class="mi">100</span><span class="p">,</span> <span class="mi">80</span><span class="p">]</span>

<span class="n">res_prod</span> <span class="o">=</span> <span class="nf">linprog</span><span class="p">(</span><span class="n">c_prod</span><span class="p">,</span> <span class="n">A_ub</span><span class="o">=</span><span class="n">A_prod</span><span class="p">,</span> <span class="n">b_ub</span><span class="o">=</span><span class="n">b_prod</span><span class="p">,</span> <span class="n">bounds</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span> <span class="n">method</span><span class="o">=</span><span class="sh">'</span><span class="s">highs</span><span class="sh">'</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Lợi nhuận tối đa: </span><span class="si">{</span><span class="o">-</span><span class="n">res_prod</span><span class="p">.</span><span class="n">fun</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Sản lượng x1: </span><span class="si">{</span><span class="n">res_prod</span><span class="p">.</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s">, x2: </span><span class="si">{</span><span class="n">res_prod</span><span class="p">.</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>Kết quả trực quan hóa vùng nghiệm:</strong></p>

<p><img src="/assets/images/posts/2026-01-23-linear-program/1-production-mix.png" alt="Tối ưu hóa Sản xuất" /></p>

<hr />

<h4 id="-giải-bài-toán-2-vận-chuyển-hàng-hóa">🚚 Giải Bài toán 2: Vận chuyển hàng hóa</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Hệ số chi phí: [x11, x12, x21, x22]
</span><span class="n">c_trans</span> <span class="o">=</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>

<span class="c1"># Ràng buộc đẳng thức (Supply &amp; Demand)
</span><span class="n">A_eq_trans</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="c1"># Supply S1
</span>    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="c1"># Supply S2
</span>    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="c1"># Demand D1
</span>    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>  <span class="c1"># Demand D2
</span><span class="p">]</span>
<span class="n">b_eq_trans</span> <span class="o">=</span> <span class="p">[</span><span class="mi">50</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">70</span><span class="p">]</span>

<span class="n">res_trans</span> <span class="o">=</span> <span class="nf">linprog</span><span class="p">(</span><span class="n">c_trans</span><span class="p">,</span> <span class="n">A_eq</span><span class="o">=</span><span class="n">A_eq_trans</span><span class="p">,</span> <span class="n">b_eq</span><span class="o">=</span><span class="n">b_eq_trans</span><span class="p">,</span> <span class="n">bounds</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span> <span class="n">method</span><span class="o">=</span><span class="sh">'</span><span class="s">highs</span><span class="sh">'</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Chi phí tối thiểu: </span><span class="si">{</span><span class="n">res_trans</span><span class="p">.</span><span class="n">fun</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Phân bổ: </span><span class="si">{</span><span class="n">res_trans</span><span class="p">.</span><span class="n">x</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>Biểu đồ phân phối hàng hóa:</strong></p>

<p><img src="/assets/images/posts/2026-01-23-linear-program/2-transportation.png" alt="Phân bổ Vận chuyển" /></p>

<hr />

<h4 id="-giải-bài-toán-3-tiến-độ-dự-án-cpm">📅 Giải Bài toán 3: Tiến độ Dự án (CPM)</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Biến: [t_A, t_B, t_C, t_End]. Mục tiêu: Min t_End
</span><span class="n">c_proj</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> 
<span class="n">d_A</span><span class="p">,</span> <span class="n">d_B</span><span class="p">,</span> <span class="n">d_C</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span>

<span class="c1"># Ràng buộc thứ tự công việc
</span><span class="n">A_ub_proj</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="c1"># t_A - t_C &lt;= -3
</span>    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="c1"># t_B - t_C &lt;= -2
</span>    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span>  <span class="c1"># t_C - t_End &lt;= -4
</span><span class="p">]</span>
<span class="n">b_ub_proj</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="n">d_A</span><span class="p">,</span> <span class="o">-</span><span class="n">d_B</span><span class="p">,</span> <span class="o">-</span><span class="n">d_C</span><span class="p">]</span>

<span class="n">res_proj</span> <span class="o">=</span> <span class="nf">linprog</span><span class="p">(</span><span class="n">c_proj</span><span class="p">,</span> <span class="n">A_ub</span><span class="o">=</span><span class="n">A_ub_proj</span><span class="p">,</span> <span class="n">b_ub</span><span class="o">=</span><span class="n">b_ub_proj</span><span class="p">,</span> <span class="n">bounds</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span> <span class="n">method</span><span class="o">=</span><span class="sh">'</span><span class="s">highs</span><span class="sh">'</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Thời gian hoàn thành: </span><span class="si">{</span><span class="n">res_proj</span><span class="p">.</span><span class="n">fun</span><span class="si">:</span><span class="p">.</span><span class="mi">1</span><span class="n">f</span><span class="si">}</span><span class="s"> ngày</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>Sơ đồ Gantt kết quả:</strong></p>

<p><img src="/assets/images/posts/2026-01-23-linear-program/3-project-management.png" alt="Tiến độ Dự án" /></p>

<hr />

<h2 id="4-kết-luận">4. Kết luận</h2>

<p>Quy hoạch tuyến tính là công cụ cực kỳ mạnh mẽ trong việc ra quyết định. Với sự hỗ trợ của các thư viện như <code class="language-plaintext highlighter-rouge">SciPy</code>, việc mô hình hóa và giải quyết các bài toán tối ưu hóa phức tạp trở nên dễ dàng và hiệu quả hơn bao giờ hết.</p>

<p><strong>Nguồn tham khảo:</strong></p>
<ol>
  <li>Dantzig, G. B. (1963). <em>Linear Programming and Extensions</em>.</li>
  <li>SciPy Documentation: <code class="language-plaintext highlighter-rouge">scipy.optimize.linprog</code>.</li>
</ol>

<hr />
<p><strong>Cập nhật cuối:</strong> 2026-01-23</p>]]></content><author><name>Hydro Structure AI</name></author><category term="Optimization" /><category term="Data Science" /><category term="Linear Programming" /><category term="Python" /><category term="SciPy" /><category term="Operations Research" /><summary type="html"><![CDATA[Quy hoạch tuyến tính (Linear Programming - LP) là một trong những kỹ thuật tối ưu hóa quan trọng nhất trong toán học ứng dụng và kinh tế. Bài viết này sẽ giới thiệu về cơ sở toán học của LP và cách triển khai giải quyết 3 bài toán thực tế bằng thư viện SciPy trong Python.]]></summary></entry><entry><title type="html">Giới thiệu và hướng dẫn sử dụng phần mềm Calcpad trong Kỹ thuật Xây dựng</title><link href="https://hydrostructai.github.io/software/engineering/calcpad-introduction/" rel="alternate" type="text/html" title="Giới thiệu và hướng dẫn sử dụng phần mềm Calcpad trong Kỹ thuật Xây dựng" /><published>2026-01-21T10:00:00+07:00</published><updated>2026-01-21T10:00:00+07:00</updated><id>https://hydrostructai.github.io/software/engineering/calcpad-introduction</id><content type="html" xml:base="https://hydrostructai.github.io/software/engineering/calcpad-introduction/"><![CDATA[<p><strong><a href="https://hydrostructai.com/calcpad_engineering/calcpad.html">Xem chi tiết các báo cáo mẫu tại đây</a></strong></p>

<hr />

<p>Calcpad là công cụ tính toán kỹ thuật mạnh mẽ cho phép bạn viết các phép tính phức tạp dưới dạng văn bản và tự động tạo báo cáo chuyên nghiệp.</p>

<p><strong>Website Calcpad:</strong> <a href="https://www.calcpad.eu">https://www.calcpad.eu</a></p>

<hr />

<h2 id="-giới-thiệu-calcpad">📖 Giới thiệu Calcpad</h2>

<h3 id="calcpad-là-gì">Calcpad là gì?</h3>
<p>Calcpad cho phép bạn:</p>
<ul>
  <li>✅ Viết phương trình toán học dạng văn bản đơn giản</li>
  <li>✅ Tự động tính toán và hiển thị kết quả</li>
  <li>✅ Tạo báo cáo chuyên nghiệp (HTML + PDF)</li>
  <li>✅ Giữ lịch sử tính toán rõ ràng</li>
  <li>✅ Chia sẻ công việc dễ dàng qua file <code class="language-plaintext highlighter-rouge">.cpd</code></li>
</ul>

<h3 id="tại-sao-dùng-calcpad">Tại sao dùng Calcpad?</h3>
<ul>
  <li>📊 <strong>Rõ ràng:</strong> Mọi công thức và kết quả đều có thể nhìn thấy</li>
  <li>🔄 <strong>Tái sử dụng:</strong> Thay đổi giá trị đầu vào → kết quả tự động cập nhật</li>
  <li>📁 <strong>Dễ lưu trữ:</strong> Một file <code class="language-plaintext highlighter-rouge">.cpd</code> chứa mọi thứ</li>
  <li>🌐 <strong>Chia sẻ:</strong> Tạo HTML/PDF để gửi cho đồng nghiệp</li>
  <li>⚡ <strong>Nhanh:</strong> Viết công thức nhanh hơn Excel hoặc tính máy</li>
</ul>

<hr />

<h2 id="-tính-năng-chính">🎯 Tính năng chính</h2>

<table>
  <thead>
    <tr>
      <th>Tính năng</th>
      <th>Mô tả</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Biến số</strong></td>
      <td>Khai báo biến và gán giá trị</td>
    </tr>
    <tr>
      <td><strong>Công thức</strong></td>
      <td>Viết phương trình toán học</td>
    </tr>
    <tr>
      <td><strong>Đơn vị</strong></td>
      <td>Tự động chuyển đổi đơn vị</td>
    </tr>
    <tr>
      <td><strong>Dự toán</strong></td>
      <td>Kiểm tra kết quả với <code class="language-plaintext highlighter-rouge">=?</code></td>
    </tr>
    <tr>
      <td><strong>Văn bản</strong></td>
      <td>Thêm mô tả bằng dấu ngoặc kép <code class="language-plaintext highlighter-rouge">"..."</code></td>
    </tr>
    <tr>
      <td><strong>Đồ thị</strong></td>
      <td>Vẽ sơ đồ và biểu đồ</td>
    </tr>
    <tr>
      <td><strong>HTML/PDF</strong></td>
      <td>Xuất báo cáo chuyên nghiệp</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="-bắt-đầu-nhanh-5-phút">🚀 Bắt đầu nhanh (5 Phút)</h2>

<h3 id="bước-1-tạo-file-cpd">Bước 1: Tạo File <code class="language-plaintext highlighter-rouge">.cpd</code></h3>

<p>Tạo file text tên <code class="language-plaintext highlighter-rouge">my_analysis.cpd</code> với nội dung:</p>

<pre><code class="language-calcpad">"Báo cáo Phân tích Dầm"
'Bước 1: Nhập dữ liệu
L = 6 "Dài nhịp (m)"
P = 50 "Tải trọng (kN)"
I = 0.005 "Moment quán tính (m⁴)"

'Bước 2: Tính toán
M = P * L / 4 "Moment uốn (kNm)"
σ = M / (I / 0.3) "Ứng suất (kPa)"

'Bước 3: Kiểm tra kết quả
M = ? "Moment uốn = ?"
σ = ? "Ứng suất = ?"
</code></pre>

<h3 id="bước-2-chạy-calcpad">Bước 2: Chạy Calcpad</h3>

<p><strong>Trên Windows/Mac:</strong></p>
<ol>
  <li>Mở Calcpad Editor</li>
  <li>File → Open → Chọn <code class="language-plaintext highlighter-rouge">my_analysis.cpd</code></li>
  <li>Nhấn “Generate” hoặc Ctrl+G</li>
  <li>Xem kết quả tạo thành file <code class="language-plaintext highlighter-rouge">my_analysis.html</code></li>
</ol>

<p><strong>Trên Linux/WSL:</strong></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>calcpad my_analysis.cpd
</code></pre></div></div>

<h3 id="bước-3-sử-dụng-calcpad-trên-vs-code">Bước 3: Sử dụng Calcpad trên VS Code</h3>
<p>Sử dụng VS Code giúp bạn viết code nhanh hơn nhờ tính năng gợi ý (Intellisense) và xem kết quả ngay lập tức.</p>

<ol>
  <li><strong>Cài đặt:</strong> Mở VS Code, nhấn <code class="language-plaintext highlighter-rouge">Ctrl+Shift+X</code>, tìm “Calcpad” hoặc cài từ file <code class="language-plaintext highlighter-rouge">.vsix</code>.</li>
  <li><strong>Chạy tính toán:</strong> Nhấn <strong><code class="language-plaintext highlighter-rouge">Ctrl+Shift+B</code></strong>, báo cáo HTML sẽ hiện ra ở cửa sổ bên cạnh.</li>
  <li><strong>Mở phần mềm gốc:</strong> Nhấn <code class="language-plaintext highlighter-rouge">Ctrl+Shift+O</code> để mở file trong Calcpad Editor.</li>
  <li><strong>Cấu hình trên WSL/Linux:</strong> 
Nếu bạn dùng Linux hoặc WSL, cần vào <strong>Settings</strong> (<code class="language-plaintext highlighter-rouge">Ctrl+,</code>) và chỉnh lại đường dẫn:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">calcpad.cliPath</code>: <code class="language-plaintext highlighter-rouge">/usr/local/bin/calcpad</code></li>
      <li><code class="language-plaintext highlighter-rouge">calcpad.Path</code>: <code class="language-plaintext highlighter-rouge">/usr/local/bin/calcpad</code></li>
      <li><code class="language-plaintext highlighter-rouge">calcpad.settingsPath</code>: <code class="language-plaintext highlighter-rouge">$HOME/.calcpad/Settings.xml</code></li>
    </ul>
  </li>
</ol>

<h3 id="bước-4-xem-kết-quả">Bước 4: Xem Kết Quả</h3>
<ul>
  <li>✅ File <code class="language-plaintext highlighter-rouge">my_analysis.html</code> được tạo</li>
  <li>✅ Mở trong trình duyệt hoặc WebView của VS Code để xem báo cáo</li>
  <li>✅ In hoặc lưu thành PDF bằng <code class="language-plaintext highlighter-rouge">wkhtmltopdf</code></li>
</ul>

<hr />

<h2 id="-cú-pháp-calcpad-cơ-bản">📝 Cú pháp Calcpad cơ bản</h2>

<h3 id="1-khai-báo-biến">1. Khai Báo Biến</h3>

<pre><code class="language-calcpad">L = 6              'Biến không có đơn vị
L = 6 "m"          'Biến có đơn vị (mét)
L = 6 "mm" = ? "m" 'Chuyển đổi đơn vị (từ mm sang m)
</code></pre>

<h3 id="2-phép-toán">2. Phép toán</h3>

<pre><code class="language-calcpad">A = 5 + 3
B = A * 2
C = 10 / 5
D = 2 ^ 3          'Lũy thừa (2³ = 8)
E = √16            'Căn bậc hai
</code></pre>

<h3 id="3-cách-ghi-chú-giải-thích">3. Cách ghi chú, giải thích</h3>

<pre><code class="language-calcpad">'Dòng bắt đầu với dấu ngoặc đơn (') là bình luận
"Dòng này sẽ hiển thị trong báo cáo"
"Bước 1: Tính diện tích"
</code></pre>

<h3 id="4-hiển-thị-kết-quả">4. Hiển thị kết quả</h3>

<pre><code class="language-calcpad">M = 50 * 6 / 4    'Tính moment
M = ?             'Hiển thị kết quả: M = 75 kNm
</code></pre>

<h3 id="5-định-dạng-đầu-ra">5. Định dạng đầu ra</h3>

<pre><code class="language-calcpad">M = 75
M = 75%           'Phần trăm: 75%
M = 75#2          'Làm tròn 2 chữ số thập phân
M = 75!           'Bỏ qua hiển thị (giấu kết quả)
</code></pre>

<hr />

<h2 id="-ví-dụ-thực-tế">💡 Ví dụ thực tế</h2>

<h3 id="ví-dụ-1-tính-diện-tích-hình-chữ-nhật">Ví dụ 1: Tính diện tích hình chữ nhật</h3>

<pre><code class="language-calcpad">"Diện tích hình chữ nhật"
b = 5 "m" 'Chiều rộng
h = 3 "m" 'Chiều dài
A = b * h "m²" 'Diện tích
A = ? "Diện tích = ?"
</code></pre>

<h3 id="ví-dụ-2-tính-moment-uốn-dầm-đơn-giản">Ví dụ 2: Tính Moment uốn dầm đơn giản</h3>

<pre><code class="language-calcpad">"Phân tích dầm đơn giản chịu tải trọng tập trung"

'Dữ liệu đầu vào
L = 6 "m" 'Chiều dài dầm
P = 100 "kN" 'Tải trọng tập trung ở giữa nhịp
a = L / 2 "m" 'Vị trí tải trọng

'Tính toán phản lực
R_A = P * (L - a) / L "kN"
R_B = P * a / L "kN"

'Moment uốn tại giữa nhịp
M_max = P * a * (L - a) / L "kNm"

'Hiển thị kết quả
"Phản lực tại A:"
R_A = ? 

"Phản lực tại B:"
R_B = ?

"Moment uốn cực đại:"
M_max = ?
</code></pre>

<h3 id="ví-dụ-3-tính-toán-cốt-thép-dầm-bê-tông">Ví dụ 3: Tính toán cốt thép dầm bê tông</h3>

<pre><code class="language-calcpad">
'Dữ liệu
M = 75 "kNm" 'Moment tác dụng
f_y = 400 "MPa" 'Cường độ chảy thép
f_c = 30 "MPa" 'Cường độ nén bê tông
d = 0.5 "m" 'Độ sâu hiệu dụng

'Tính diện tích thép cần thiết
M_N = M * 1000 "kN"
A_s_min = M_N / (0.87 * f_y * d) "cm²"

"Diện tích thép cần thiết:"
A_s_min = ?

"Chọn thép: 4Φ20 = 12.57 cm² ✓"
</code></pre>

<hr />

<h2 id="-định-dạng-văn-bản">🎨 Định dạng văn bản</h2>

<h3 id="heading-tiêu-đề">Heading (Tiêu đề)</h3>

<pre><code class="language-calcpad">"Tiêu đề chính"           'Heading 1
"_Tiêu đề phụ"           'Heading 2
"__Tiêu đề phụ 1"      'Heading 3
</code></pre>

<h3 id="in-đậm-nghiêng">In Đậm, Nghiêng</h3>

<pre><code class="language-calcpad">"Văn bản **đậm**"          'In đậm
"Văn bản **_nghiêng_**"   'Nghiêng
"Văn bản ***đậm nghiêng***"
</code></pre>

<h3 id="danh-sách">Danh sách</h3>

<pre><code class="language-calcpad">"Danh sách gạch đầu dòng:
• Mục 1
• Mục 2
• Mục 3"

"Danh sách số:
1. Mục 1
2. Mục 2
3. Mục 3"
</code></pre>

<hr />

<h2 id="-từ-calcpad-sang-htmlpdf">🌐 Từ Calcpad sang HTML/PDF</h2>

<h3 id="tại-sao-xuất-htmlpdf">Tại sao xuất HTML/PDF?</h3>
<ul>
  <li>📤 <strong>Chia sẻ:</strong> Gửi báo cáo cho đồng nghiệp không cần Calcpad</li>
  <li>🖨️ <strong>In ấn:</strong> In báo cáo chuyên nghiệp từ HTML</li>
  <li>📎 <strong>Lưu trữ:</strong> Lưu bản sao lưu định kỳ</li>
  <li>🌐 <strong>Công bố:</strong> Đăng lên website</li>
</ul>

<h3 id="hướng-dẫn">Hướng dẫn</h3>

<p><strong>Calcpad Editor:</strong></p>
<ol>
  <li>Mở file <code class="language-plaintext highlighter-rouge">.cpd</code></li>
  <li>Nhấn “Generate” (Ctrl+G)</li>
  <li>Tìm file <code class="language-plaintext highlighter-rouge">.html</code> được tạo ra cùng thư mục</li>
</ol>

<p><strong>Từ dòng lệnh:</strong></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>calcpad my_analysis.cpd
<span class="c"># Tạo file: my_analysis.html</span>
</code></pre></div></div>

<p><strong>Tạo PDF:</strong></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wkhtmltopdf my_analysis.html my_analysis.pdf
</code></pre></div></div>

<hr />

<h2 id="-mẹo--thủ-thuật">⚡ Mẹo &amp; Thủ thuật</h2>

<h3 id="1-tái-sử-dụng-template">1. Tái sử dụng Template</h3>
<p>Lưu file <code class="language-plaintext highlighter-rouge">.cpd</code> làm template, sau đó:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cp </span>template.cpd my_new_analysis.cpd
</code></pre></div></div>
<p>Chỉnh sửa giá trị đầu vào, kết quả tự động cập nhật!</p>

<h3 id="2-nhóm-biến-liên-quan">2. Nhóm biến liên quan</h3>
<pre><code class="language-calcpad">'Vật liệu bê tông
f_c = 30 "MPa"
E_c = 25000 "MPa"

'Vật liệu thép
f_y = 400 "MPa"
E_s = 200000 "MPa"
</code></pre>

<h3 id="3-kiểm-tra-độc-lập">3. Kiểm tra độc lập</h3>
<pre><code class="language-calcpad">'Tính toán chính
M = 75 "kNm"

'Kiểm tra lại bằng công thức khác
M_check = P * L / 4
M_check = ?

'Nếu kết quả bằng nhau thì ✓ đúng
</code></pre>

<h3 id="4-ẩn-các-phép-tính-trung-gian">4. Ẩn Các Phép Tính Trung Gian</h3>
<pre><code class="language-calcpad">temp = 5 * 10 'Ẩn không hiển thị
result = temp / 2
result = ? 'Chỉ hiển thị kết quả cuối
</code></pre>

<hr />

<h2 id="-xử-lý-sự-cố">🛠 Xử lý sự cố</h2>

<table>
  <thead>
    <tr>
      <th>Vấn đề</th>
      <th>Giải pháp</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Lỗi cú pháp</strong></td>
      <td>Kiểm tra dấu ngoặc kép, dấu phẩy, toán tử</td>
    </tr>
    <tr>
      <td><strong>Không tính toán được</strong></td>
      <td>Kiểm tra đơn vị, biến chưa khai báo</td>
    </tr>
    <tr>
      <td><strong>HTML không được tạo</strong></td>
      <td>Chắc chắn file <code class="language-plaintext highlighter-rouge">.cpd</code> không có lỗi cú pháp</td>
    </tr>
    <tr>
      <td><strong>PDF lỗi định dạng</strong></td>
      <td>Kiểm tra Calcpad đã tạo HTML thành công</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="-hỗ-trợ">👨‍💼 Hỗ trợ</h2>

<p><strong>Các câu hỏi thường gặp:</strong></p>
<ol>
  <li>Làm cách nào để viết căn bậc hai? <code class="language-plaintext highlighter-rouge">√</code> hoặc <code class="language-plaintext highlighter-rouge">sqrt()</code></li>
  <li>Làm cách nào để chuyển đơn vị? <code class="language-plaintext highlighter-rouge">L = 1000 "mm" = ? "m"</code></li>
  <li>Làm cách nào để ẩn dòng tính toán? Thêm <code class="language-plaintext highlighter-rouge">!</code> vào cuối</li>
</ol>

<p>Xem thêm: <a href="https://www.calcpad.eu/docs">https://www.calcpad.eu/docs</a></p>

<hr />]]></content><author><name>Hydro Structure AI</name></author><category term="Software" /><category term="Engineering" /><category term="Calcpad" /><category term="Automation" /><category term="Structural Engineering" /><category term="Technical Report" /><summary type="html"><![CDATA[Xem chi tiết các báo cáo mẫu tại đây]]></summary></entry><entry><title type="html">Mô Hình Đất Sét Cam-Clay: Phân Tích Ứng Suất-Biến Dạng</title><link href="https://hydrostructai.github.io/geotechnical%20engineering/computational%20mechanics/camclay/" rel="alternate" type="text/html" title="Mô Hình Đất Sét Cam-Clay: Phân Tích Ứng Suất-Biến Dạng" /><published>2025-12-21T15:30:00+07:00</published><updated>2025-12-21T15:30:00+07:00</updated><id>https://hydrostructai.github.io/geotechnical%20engineering/computational%20mechanics/camclay</id><content type="html" xml:base="https://hydrostructai.github.io/geotechnical%20engineering/computational%20mechanics/camclay/"><![CDATA[<h2 id="tổng-quan">Tổng Quan</h2>

<p>Mô hình Cam Clay cải tiến - <strong>Modified Cam-Clay (MCC)</strong> là một trong những mô hình đàn dẻo kinh điển nhất trong cơ học đất, đặc biệt hiệu quả để dự báo hành vi của đất sét cố kết bình thường (normally consolidated clay) và đất sét quá cố kết(over-consolidated clay) dưới các điều kiện tải khác nhau.</p>

<p>Bài viết này trình bày phương pháp triển khai mô hình MCC mô phỏng biến dạng triaxial drained/undrained một cách nhanh chóng và chính xác.</p>

<p><strong>Ứng Dụng Thực Tế:</strong></p>
<ul>
  <li>Phân tích ổn định nền móng</li>
  <li>Dự báo chuyển vị tường chắn</li>
  <li>Thiết kế hệ thống thoát nước cho công trình</li>
  <li>Mô phỏng động học đất dưới tải trọng động</li>
</ul>

<hr />

<h2 id="1-tham-số-mô-hình-modified-cam-clay">1. Tham Số Mô Hình Modified Cam-Clay</h2>

<h3 id="11-các-thông-số-cơ-bản">1.1 Các Thông Số Cơ Bản</h3>

<p>Mô hình MCC được kiểm soát bởi 7 thông số địa kỹ thuật chính:</p>

<table>
  <thead>
    <tr>
      <th>Thông Số</th>
      <th>Ký Hiệu</th>
      <th>Mô Tả</th>
      <th>Đơn Vị</th>
      <th>Giá Trị Mẫu</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Áp suất tiền cố kết ban đầu</td>
      <td>\(p_c\)</td>
      <td>Preconsolidation pressure</td>
      <td>kPa</td>
      <td>150</td>
    </tr>
    <tr>
      <td>Áp suất gối tựa ban đầu</td>
      <td>\(p_0\)</td>
      <td>Initial confining pressure</td>
      <td>kPa</td>
      <td>150</td>
    </tr>
    <tr>
      <td>Độ dốc đường tráng thái tới hạn- tham số ma sát giới hạn</td>
      <td>\(M\)</td>
      <td>Critical friction parameter</td>
      <td>-</td>
      <td>0.95</td>
    </tr>
    <tr>
      <td>Chỉ số nén</td>
      <td>\(\lambda\)</td>
      <td>Compression index</td>
      <td>-</td>
      <td>0.2</td>
    </tr>
    <tr>
      <td>Chỉ số nén/nở lại</td>
      <td>\(\kappa\)</td>
      <td>Recompression index</td>
      <td>-</td>
      <td>0.04</td>
    </tr>
    <tr>
      <td>Tham số đường NCL</td>
      <td>\(N\)</td>
      <td>Normal Consolidation Line parameter</td>
      <td>-</td>
      <td>2.5</td>
    </tr>
    <tr>
      <td>Hệ số Poisson</td>
      <td>\(\nu\)</td>
      <td>Poisson’s ratio</td>
      <td>-</td>
      <td>0.15</td>
    </tr>
  </tbody>
</table>

<h3 id="12-các-khái-nhiệm-cính">1.2 Các khái nhiệm cính</h3>

<p><strong>Ứng Suất Hữu Hiệu (\(p'\) hoặc \(p\))</strong><br />
Ứng suất hữu hiệu là sự kết hợp của ứng suất tổng và áp lực nước lỗ rỗng:
\(p' = \frac{\sigma_1' + \sigma_2' + \sigma_3'}{3}\)</p>

<p><strong>Ứng Suất Lệch (\(q\))</strong><br />
Độ lệch ứng suất chính được định nghĩa trong thử nghiệm triaxial:
\(q = \sigma_1' - \sigma_3'\)</p>

<p><strong>Hệ Số Rỗng (\(e\)) và Thể Tích Riêng (\(V\))</strong><br />
\(e = V - 1.0\)
\(V = N - \lambda \ln(p_c) + \kappa \ln\left(\frac{p_c}{p_0}\right)\)</p>

<p><strong>Mặt Chảy Modified Cam-Clay</strong><br />
Bề mặt chảy trong không gian \(p'-q\) được mô tả bởi:
\(f = q^2 - M^2 p'(p_c - p') = 0\)</p>

<hr />

<h2 id="2-cấu-trúc-code-julia">2. Cấu trúc Code Julia</h2>

<p>Triển khai mô hình MCC được chia thành 6 phần chính:</p>

<h3 id="21-nhập-thư-viện-cần-thiết">2.1 Nhập Thư Viện Cần Thiết</h3>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">using</span> <span class="n">Plots</span><span class="x">,</span> <span class="n">LinearAlgebra</span><span class="x">,</span> <span class="n">DelimitedFiles</span><span class="x">,</span> <span class="n">Statistics</span><span class="x">,</span> <span class="n">FileIO</span>
<span class="n">gr</span><span class="x">()</span>  <span class="c"># Use GR backend for faster plotting</span>
</code></pre></div></div>

<p><strong>Thư Viện:</strong></p>
<ul>
  <li><strong>Plots.jl</strong>: Tạo hình vẽ khoa học với GR backend nhanh</li>
  <li><strong>LinearAlgebra</strong>: Phép toán ma trận và vectơ</li>
  <li><strong>DelimitedFiles</strong>: Đọc/ghi tệp CSV</li>
  <li><strong>Statistics</strong>: Hàm thống kê</li>
  <li><strong>FileIO</strong>: Xử lý tệp và định dạng</li>
</ul>

<h3 id="22-khởi-tạo-thông-số">2.2 Khởi Tạo Thông Số</h3>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Input Parameters for Modified Cam-Clay</span>
<span class="n">println</span><span class="x">(</span><span class="s">"Input Parameters for Modified Cam-Clay:"</span><span class="x">)</span>

<span class="c"># Geotechnical Parameters</span>
<span class="n">cp</span> <span class="o">=</span> <span class="mf">150.0</span>          <span class="c"># Initial consolidation pressure (kPa)</span>
<span class="n">p₀</span> <span class="o">=</span> <span class="mf">150.0</span>          <span class="c"># Initial confining pressure (kPa)</span>
<span class="n">M</span> <span class="o">=</span> <span class="mf">0.95</span>            <span class="c"># Critical friction angle parameter</span>
<span class="n">λ</span> <span class="o">=</span> <span class="mf">0.2</span>             <span class="c"># Compression index</span>
<span class="n">κ</span> <span class="o">=</span> <span class="mf">0.04</span>            <span class="c"># Recompression index</span>
<span class="n">N</span> <span class="o">=</span> <span class="mf">2.5</span>             <span class="c"># Parameter for NCL</span>
<span class="n">ν</span> <span class="o">=</span> <span class="mf">0.15</span>            <span class="c"># Poisson's ratio</span>

<span class="c"># Analysis type: 1 = Drained, 2 = Undrained</span>
<span class="n">analysis</span> <span class="o">=</span> <span class="mi">1</span>        <span class="c"># 1 = Triaxial Drained, 2 = Triaxial Undrained</span>

<span class="c"># Iteration parameters</span>
<span class="n">iteration</span> <span class="o">=</span> <span class="mi">7500</span>    <span class="c"># Number of strain increments</span>
<span class="n">ide</span> <span class="o">=</span> <span class="mf">0.01</span>          <span class="c"># Strain increment (%)</span>
<span class="n">de</span> <span class="o">=</span> <span class="n">ide</span> <span class="o">/</span> <span class="mi">100</span>      <span class="c"># Strain increment (decimal)</span>
</code></pre></div></div>

<p><strong>Giải Thích:</strong></p>
<ul>
  <li><strong>cp</strong>: Áp suất tiền cố kết (kPa) - đặc trưng cho lịch sử cố kết của đất</li>
  <li><strong>p₀</strong>: Áp suất gối tựa ban đầu (kPa) - phải bằng cp cho đất cố kết bình thường</li>
  <li><strong>M</strong>: Độ dốc của đường trạng thái tới hạn (Critical State Line)</li>
  <li><strong>λ, κ</strong>: Kiểm soát độ nén của đất trong không gian e-ln(p’)</li>
  <li><strong>analysis</strong>: Chọn loại thử nghiệm (1=thoát nước, 2=không thoát nước)</li>
  <li><strong>iteration</strong>: Số bước tính toán (7500 → biến dạng trục ≈ 75%)</li>
</ul>

<h3 id="23-khởi-tạo-biến-trạng-thái">2.3 Khởi Tạo Biến Trạng Thái</h3>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Compute initial state variables</span>
<span class="n">pc</span> <span class="o">=</span> <span class="n">cp</span>  <span class="c"># Current preconsolidation pressure</span>

<span class="c"># Specific Volume and initial void ratio</span>
<span class="n">V</span> <span class="o">=</span> <span class="n">N</span> <span class="o">-</span> <span class="n">λ</span> <span class="o">*</span> <span class="n">log</span><span class="x">(</span><span class="n">pc</span><span class="x">)</span> <span class="o">+</span> <span class="n">κ</span> <span class="o">*</span> <span class="n">log</span><span class="x">(</span><span class="n">pc</span> <span class="o">/</span> <span class="n">p₀</span><span class="x">)</span>  <span class="c"># Specific Volume</span>
<span class="n">e₀</span> <span class="o">=</span> <span class="n">V</span> <span class="o">-</span> <span class="mf">1.0</span>                             <span class="c"># Initial void ratio</span>

<span class="c"># Over-Consolidation Ratio</span>
<span class="n">OCR</span> <span class="o">=</span> <span class="n">cp</span> <span class="o">/</span> <span class="n">p₀</span>

<span class="n">println</span><span class="x">(</span><span class="s">"Computed initial values:"</span><span class="x">)</span>
<span class="n">println</span><span class="x">(</span><span class="s">"Specific Volume V = </span><span class="si">$$</span><span class="s">V"</span><span class="x">)</span>
<span class="n">println</span><span class="x">(</span><span class="s">"Initial void ratio e₀ = </span><span class="si">$$</span><span class="s">e₀"</span><span class="x">)</span>
<span class="n">println</span><span class="x">(</span><span class="s">"Over-Consolidation Ratio (OCR) = </span><span class="si">$$</span><span class="s">OCR"</span><span class="x">)</span>

<span class="c"># Memory allocation for results</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>      <span class="c"># Mean effective stress</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>      <span class="c"># Deviatoric stress</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>      <span class="c"># Pore water pressure</span>
<span class="n">void</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>   <span class="c"># Void ratio</span>
<span class="n">epsV</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>   <span class="c"># Volumetric strain</span>
<span class="n">epsD</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>   <span class="c"># Deviatoric strain</span>
<span class="n">es</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="n">iteration</span><span class="x">)</span>     <span class="c"># Axial strain array</span>
</code></pre></div></div>

<p><strong>Khởi Tạo OCR:</strong></p>
<ul>
  <li>Nếu OCR = 1: Đất cố kết bình thường (Normally Consolidated)</li>
  <li>Nếu OCR &gt; 1: Đất cố kết quá cố cố kết (Over-Consolidated)</li>
  <li>Nếu OCR &lt; 1: Trạng thái tiền cố kết (không phổ biến)</li>
</ul>

<h3 id="24-vòng-lặp-ứng-suất-biến-dạng">2.4 Vòng Lặp Ứng Suất-Biến Dạng</h3>

<p>Vòng lặp chính thực hiện các bước tính toán, mỗi bước bao gồm:</p>

<ol>
  <li>
    <p><strong>Xác định Mô-đun Đàn Hồi</strong>
\(K = \frac{V \cdot p}{κ}, \quad G = \frac{3K(1-2ν)}{2(1+ν)}\)</p>
  </li>
  <li><strong>Ma Trận Độ Cứng Đàn Hồi (6×6)</strong>
    <ul>
      <li>Đường chéo chính: \(K + \frac{4G}{3}\)</li>
      <li>Ngoài đường chéo: \(K - \frac{2G}{3}\)</li>
      <li>Phần cắt: \(G\)</li>
    </ul>
  </li>
  <li><strong>Kiểm Tra Trạng Thái Chảy</strong>
    <ul>
      <li>Nếu \(f &lt; 0\): Sử dụng ma trận đàn hồi</li>
      <li>Nếu \(f ≥ 0\): Sử dụng ma trận đàn dẻo</li>
    </ul>
  </li>
  <li><strong>Xác định Biến Dạng Tương Ứng</strong>
    <ul>
      <li>Triaxial Drained: \(d\varepsilon_1 = de\), \(d\varepsilon_2 = d\varepsilon_3\) từ điều kiện biên</li>
      <li>Triaxial Undrained: \(d\varepsilon_1 = de\), \(d\varepsilon_2 = d\varepsilon_3 = -\frac{de}{2}\)</li>
    </ul>
  </li>
  <li><strong>Cập Nhật Ứng Suất</strong>
\(d\sigma = \mathbf{D} \cdot d\varepsilon\)</li>
</ol>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">a</span> <span class="k">in</span> <span class="mi">2</span><span class="o">:</span><span class="n">iteration</span>
    <span class="c"># Bulk and shear moduli</span>
    <span class="n">K</span> <span class="o">=</span> <span class="n">V</span> <span class="o">*</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span> <span class="o">/</span> <span class="n">κ</span>
    <span class="n">G</span> <span class="o">=</span> <span class="x">(</span><span class="mi">3</span> <span class="o">*</span> <span class="n">K</span> <span class="o">*</span> <span class="x">(</span><span class="mi">1</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">ν</span><span class="x">))</span> <span class="o">/</span> <span class="x">(</span><span class="mi">2</span> <span class="o">*</span> <span class="x">(</span><span class="mi">1</span> <span class="o">+</span> <span class="n">ν</span><span class="x">))</span>
    
    <span class="c"># Update preconsolidation pressure on yield surface</span>
    <span class="k">if</span> <span class="n">yield</span> <span class="o">==</span> <span class="mi">0</span>
        <span class="n">pc_current</span> <span class="o">=</span> <span class="x">(</span><span class="n">q</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span><span class="o">^</span><span class="mi">2</span> <span class="o">/</span> <span class="n">M</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span><span class="o">^</span><span class="mi">2</span><span class="x">)</span> <span class="o">/</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span>
    <span class="k">else</span>
        <span class="n">pc_current</span> <span class="o">=</span> <span class="n">cp</span>
    <span class="k">end</span>
    
    <span class="c"># Elastic stiffness matrix (6x6)</span>
    <span class="n">De</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="mi">6</span><span class="x">,</span> <span class="mi">6</span><span class="x">)</span>
    
    <span class="c"># Fill elastic stiffness</span>
    <span class="k">for</span> <span class="n">m</span> <span class="k">in</span> <span class="mi">1</span><span class="o">:</span><span class="mi">3</span>
        <span class="k">for</span> <span class="n">n</span> <span class="k">in</span> <span class="mi">1</span><span class="o">:</span><span class="mi">3</span>
            <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="n">n</span>
                <span class="n">De</span><span class="x">[</span><span class="n">m</span><span class="x">,</span> <span class="n">n</span><span class="x">]</span> <span class="o">=</span> <span class="n">K</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">G</span> <span class="o">/</span> <span class="mi">3</span>
            <span class="k">else</span>
                <span class="n">De</span><span class="x">[</span><span class="n">m</span><span class="x">,</span> <span class="n">n</span><span class="x">]</span> <span class="o">=</span> <span class="n">K</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">G</span> <span class="o">/</span> <span class="mi">3</span>
            <span class="k">end</span>
        <span class="k">end</span>
    <span class="k">end</span>
    
    <span class="k">for</span> <span class="n">m</span> <span class="k">in</span> <span class="mi">4</span><span class="o">:</span><span class="mi">6</span>
        <span class="n">De</span><span class="x">[</span><span class="n">m</span><span class="x">,</span> <span class="n">m</span><span class="x">]</span> <span class="o">=</span> <span class="n">G</span>
    <span class="k">end</span>
    
    <span class="c"># Determine stiffness matrix (elastic or plastic)</span>
    <span class="k">if</span> <span class="n">yield</span> <span class="o">&lt;</span> <span class="mi">0</span>
        <span class="c"># Elastic stiffness</span>
        <span class="n">D</span> <span class="o">=</span> <span class="n">De</span>
    <span class="k">else</span>
        <span class="c"># Elastoplastic stiffness - compute gradients</span>
        <span class="n">dfds</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="mi">6</span><span class="x">)</span>
        <span class="n">dfdep</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="mi">6</span><span class="x">)</span>
        
        <span class="k">for</span> <span class="n">m</span> <span class="k">in</span> <span class="mi">1</span><span class="o">:</span><span class="mi">3</span>
            <span class="n">dfds</span><span class="x">[</span><span class="n">m</span><span class="x">]</span> <span class="o">=</span> <span class="x">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span> <span class="o">-</span> <span class="n">pc_current</span><span class="x">)</span> <span class="o">/</span> <span class="mi">3</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">*</span> <span class="x">(</span><span class="n">S</span><span class="x">[</span><span class="n">m</span><span class="x">]</span> <span class="o">-</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">])</span> <span class="o">/</span> <span class="n">M</span><span class="o">^</span><span class="mi">2</span>
            <span class="n">dfdep</span><span class="x">[</span><span class="n">m</span><span class="x">]</span> <span class="o">=</span> <span class="x">(</span><span class="o">-</span><span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">])</span> <span class="o">*</span> <span class="n">pc_current</span> <span class="o">*</span> <span class="x">(</span><span class="mi">1</span> <span class="o">+</span> <span class="n">e₀</span><span class="x">)</span> <span class="o">/</span> <span class="x">(</span><span class="n">λ</span> <span class="o">-</span> <span class="n">κ</span><span class="x">)</span> <span class="o">*</span> <span class="mi">1</span>
        <span class="k">end</span>
        
        <span class="c"># Elastoplastic matrix</span>
        <span class="n">numerator</span> <span class="o">=</span> <span class="n">De</span> <span class="o">*</span> <span class="n">dfds</span> <span class="o">*</span> <span class="n">dfds</span><span class="err">'</span> <span class="o">*</span> <span class="n">De</span>
        <span class="n">denominator</span> <span class="o">=</span> <span class="o">-</span><span class="x">(</span><span class="n">dfdep</span><span class="err">'</span> <span class="o">*</span> <span class="n">dfds</span><span class="x">)[</span><span class="mi">1</span><span class="x">]</span> <span class="o">+</span> <span class="x">(</span><span class="n">dfds</span><span class="err">'</span> <span class="o">*</span> <span class="n">De</span> <span class="o">*</span> <span class="n">dfds</span><span class="x">)[</span><span class="mi">1</span><span class="x">]</span>
        
        <span class="k">if</span> <span class="n">abs</span><span class="x">(</span><span class="n">denominator</span><span class="x">)</span> <span class="o">&gt;</span> <span class="mf">1e-12</span>
            <span class="n">D</span> <span class="o">=</span> <span class="n">De</span> <span class="o">-</span> <span class="n">numerator</span> <span class="o">./</span> <span class="n">denominator</span>
        <span class="k">else</span>
            <span class="n">D</span> <span class="o">=</span> <span class="n">De</span>
        <span class="k">end</span>
    <span class="k">end</span>
    
    <span class="c"># Strain increment based on analysis type</span>
    <span class="n">dStrain</span> <span class="o">=</span> <span class="n">zeros</span><span class="x">(</span><span class="mi">6</span><span class="x">)</span>
    <span class="k">if</span> <span class="n">analysis</span> <span class="o">==</span> <span class="mi">1</span>
        <span class="c"># Triaxial Drained</span>
        <span class="n">dStrain</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">=</span> <span class="n">de</span>
        <span class="k">if</span> <span class="n">abs</span><span class="x">(</span><span class="n">D</span><span class="x">[</span><span class="mi">2</span><span class="x">,</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">D</span><span class="x">[</span><span class="mi">2</span><span class="x">,</span><span class="mi">3</span><span class="x">])</span> <span class="o">&gt;</span> <span class="mf">1e-12</span>
            <span class="n">dStrain</span><span class="x">[</span><span class="mi">2</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="n">D</span><span class="x">[</span><span class="mi">2</span><span class="x">,</span><span class="mi">1</span><span class="x">]</span> <span class="o">/</span> <span class="x">(</span><span class="n">D</span><span class="x">[</span><span class="mi">2</span><span class="x">,</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">D</span><span class="x">[</span><span class="mi">2</span><span class="x">,</span><span class="mi">3</span><span class="x">])</span> <span class="o">*</span> <span class="n">de</span>
        <span class="k">else</span>
            <span class="n">dStrain</span><span class="x">[</span><span class="mi">2</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">de</span> <span class="o">/</span> <span class="mi">2</span>
        <span class="k">end</span>
        <span class="k">if</span> <span class="n">abs</span><span class="x">(</span><span class="n">D</span><span class="x">[</span><span class="mi">3</span><span class="x">,</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">D</span><span class="x">[</span><span class="mi">3</span><span class="x">,</span><span class="mi">3</span><span class="x">])</span> <span class="o">&gt;</span> <span class="mf">1e-12</span>
            <span class="n">dStrain</span><span class="x">[</span><span class="mi">3</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="n">D</span><span class="x">[</span><span class="mi">3</span><span class="x">,</span><span class="mi">1</span><span class="x">]</span> <span class="o">/</span> <span class="x">(</span><span class="n">D</span><span class="x">[</span><span class="mi">3</span><span class="x">,</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">D</span><span class="x">[</span><span class="mi">3</span><span class="x">,</span><span class="mi">3</span><span class="x">])</span> <span class="o">*</span> <span class="n">de</span>
        <span class="k">else</span>
            <span class="n">dStrain</span><span class="x">[</span><span class="mi">3</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">de</span> <span class="o">/</span> <span class="mi">2</span>
        <span class="k">end</span>
    <span class="k">else</span>
        <span class="c"># Triaxial Undrained</span>
        <span class="n">dStrain</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">=</span> <span class="n">de</span>
        <span class="n">dStrain</span><span class="x">[</span><span class="mi">2</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">de</span> <span class="o">/</span> <span class="mi">2</span>
        <span class="n">dStrain</span><span class="x">[</span><span class="mi">3</span><span class="x">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">de</span> <span class="o">/</span> <span class="mi">2</span>
    <span class="k">end</span>
    
    <span class="c"># Stress increment and update</span>
    <span class="n">dS</span> <span class="o">=</span> <span class="n">D</span> <span class="o">*</span> <span class="n">dStrain</span>
    <span class="n">S</span> <span class="o">=</span> <span class="n">S</span> <span class="o">+</span> <span class="n">dS</span>
    <span class="n">strain</span> <span class="o">=</span> <span class="n">strain</span> <span class="o">+</span> <span class="n">dStrain</span>
    
    <span class="c"># Update invariants and state variables</span>
    <span class="n">depsV</span> <span class="o">=</span> <span class="n">dStrain</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">+</span> <span class="n">dStrain</span><span class="x">[</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">dStrain</span><span class="x">[</span><span class="mi">3</span><span class="x">]</span>
    <span class="n">depsD</span> <span class="o">=</span> <span class="x">(</span><span class="mi">2</span> <span class="o">/</span> <span class="mi">3</span><span class="x">)</span> <span class="o">*</span> <span class="x">(</span><span class="n">dStrain</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">-</span> <span class="n">dStrain</span><span class="x">[</span><span class="mi">3</span><span class="x">])</span>
    
    <span class="n">V</span> <span class="o">=</span> <span class="n">N</span> <span class="o">-</span> <span class="n">λ</span> <span class="o">*</span> <span class="n">log</span><span class="x">(</span><span class="n">pc_current</span><span class="x">)</span> <span class="o">+</span> <span class="n">κ</span> <span class="o">*</span> <span class="n">log</span><span class="x">(</span><span class="n">pc_current</span> <span class="o">/</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">])</span>
    
    <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="x">(</span><span class="n">S</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">+</span> <span class="n">S</span><span class="x">[</span><span class="mi">2</span><span class="x">]</span> <span class="o">+</span> <span class="n">S</span><span class="x">[</span><span class="mi">3</span><span class="x">])</span> <span class="o">/</span> <span class="mi">3</span>
    <span class="n">q</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="n">S</span><span class="x">[</span><span class="mi">1</span><span class="x">]</span> <span class="o">-</span> <span class="n">S</span><span class="x">[</span><span class="mi">3</span><span class="x">]</span>
    <span class="n">u</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="n">p₀</span> <span class="o">+</span> <span class="n">q</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">/</span> <span class="mi">3</span> <span class="o">-</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="x">]</span>
    
    <span class="n">void</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="n">V</span> <span class="o">-</span> <span class="mf">1.0</span>
    <span class="n">epsV</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="n">epsV</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span> <span class="o">+</span> <span class="n">depsV</span>
    <span class="n">epsD</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">=</span> <span class="n">epsD</span><span class="x">[</span><span class="n">a</span><span class="o">-</span><span class="mi">1</span><span class="x">]</span> <span class="o">+</span> <span class="n">depsD</span>
    
    <span class="c"># Update yield surface</span>
    <span class="k">if</span> <span class="n">yield</span> <span class="o">&lt;</span> <span class="mi">0</span>
        <span class="n">yield</span> <span class="o">=</span> <span class="n">q</span><span class="x">[</span><span class="n">a</span><span class="x">]</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">M</span><span class="o">^</span><span class="mi">2</span> <span class="o">*</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="x">]</span><span class="o">^</span><span class="mi">2</span> <span class="o">-</span> <span class="n">M</span><span class="o">^</span><span class="mi">2</span> <span class="o">*</span> <span class="n">p</span><span class="x">[</span><span class="n">a</span><span class="x">]</span> <span class="o">*</span> <span class="n">pc_current</span>
    <span class="k">else</span>
        <span class="n">yield</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="k">end</span>
<span class="k">end</span>
</code></pre></div></div>

<hr />

<h2 id="3-kết-quả-mô-phỏng">3. Kết Quả Mô Phỏng</h2>

<h3 id="31-đặc-tính-mặt-chảy-yield-surface">3.1 Đặc Tính Mặt Chảy (Yield Surface)</h3>

<p><strong>Đường Cố Kết Bình Thường (Normal Consolidation Line - NCL)</strong><br />
Trong không gian e-ln(p’), đất sét cố kết bình thường sẽ nằm trên:
\(e = N - \lambda \ln(p')\)</p>

<p><strong>Đường Trạng Thái Tới Hạn (Critical State Line - CSL)</strong><br />
Khi đất chảy hết sức (critical state), nó tuân theo:
\(e = \Gamma - \lambda \ln(p')\)</p>

<p><strong>Mặt Chảy Modified Cam-Clay</strong><br />
Trong không gian \(p'-q\), bề mặt chảy có dạng ellipse:
\(q = M \cdot p' \quad \text{(Critical State Line slope)}\)
\(f = q^2 - M^2 p'(p_c - p') = 0\)</p>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Initial Yield Surface</span>
<span class="n">p_ini_yield</span> <span class="o">=</span> <span class="n">collect</span><span class="x">(</span><span class="mi">0</span><span class="o">:</span><span class="n">pc</span><span class="o">/</span><span class="mi">100</span><span class="o">:</span><span class="n">pc</span><span class="x">)</span>
<span class="n">q_ini_yield</span> <span class="o">=</span> <span class="n">M</span> <span class="o">.*</span> <span class="n">p_ini_yield</span>
<span class="n">qy_ini</span> <span class="o">=</span> <span class="n">sqrt</span><span class="o">.</span><span class="x">(</span><span class="n">M</span><span class="o">^</span><span class="mi">2</span> <span class="o">.*</span> <span class="x">(</span><span class="n">cp</span> <span class="o">.*</span> <span class="n">p_ini_yield</span> <span class="o">.-</span> <span class="n">p_ini_yield</span><span class="o">.^</span><span class="mi">2</span><span class="x">))</span>

<span class="c"># Normal Consolidation Line (NCL)</span>
<span class="n">pNCL</span> <span class="o">=</span> <span class="n">collect</span><span class="x">(</span><span class="mi">1</span><span class="o">:</span><span class="n">pc</span><span class="x">)</span>
<span class="n">eNCL</span> <span class="o">=</span> <span class="n">N</span> <span class="o">.-</span> <span class="n">λ</span> <span class="o">.*</span> <span class="n">log</span><span class="o">.</span><span class="x">(</span><span class="n">pNCL</span><span class="x">)</span> <span class="o">.-</span> <span class="mi">1</span>

<span class="c"># Final Yield Surface</span>
<span class="n">p_fyield</span> <span class="o">=</span> <span class="n">collect</span><span class="x">(</span><span class="mi">0</span><span class="o">:</span><span class="n">pc</span><span class="o">/</span><span class="mi">100</span><span class="o">:</span><span class="n">pc</span><span class="x">)</span>
<span class="n">q_fyield</span> <span class="o">=</span> <span class="n">M</span> <span class="o">.*</span> <span class="n">p_fyield</span>
<span class="n">qyf</span> <span class="o">=</span> <span class="n">sqrt</span><span class="o">.</span><span class="x">(</span><span class="n">M</span><span class="o">^</span><span class="mi">2</span> <span class="o">.*</span> <span class="x">(</span><span class="n">pc</span> <span class="o">.*</span> <span class="n">p_fyield</span> <span class="o">.-</span> <span class="n">p_fyield</span><span class="o">.^</span><span class="mi">2</span><span class="x">))</span>

<span class="c"># Critical State Line (CSL)</span>
<span class="n">pCSL</span> <span class="o">=</span> <span class="n">pNCL</span>
<span class="n">Gamma</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">void</span><span class="x">[</span><span class="k">end</span><span class="x">]</span> <span class="o">+</span> <span class="n">λ</span> <span class="o">*</span> <span class="n">log</span><span class="x">(</span><span class="n">p</span><span class="x">[</span><span class="k">end</span><span class="x">])</span>
<span class="n">eCSL</span> <span class="o">=</span> <span class="n">Gamma</span> <span class="o">.-</span> <span class="n">λ</span> <span class="o">.*</span> <span class="n">log</span><span class="o">.</span><span class="x">(</span><span class="n">pCSL</span><span class="x">)</span> <span class="o">.-</span> <span class="mi">1</span>
</code></pre></div></div>

<h3 id="32-phân-tích-toàn-diện">3.2 Phân Tích Toàn Diện</h3>

<h4 id="biểu-đồ-1-ứng-suất-lệch-vs-biến-dạng-trục">Biểu Đồ 1: Ứng Suất Lệch vs Biến Dạng Trục</h4>

<p>\(\text{Trục X}: \varepsilon_a (\%) = \frac{\Delta L}{L_0} \times 100\)
\(\text{Trục Y}: q = \sigma_1' - \sigma_3' \text{ (kPa)}\)</p>

<p><strong>Ý Nghĩa Vật Lý:</strong></p>
<ul>
  <li>Giai đoạn 0-25%: Tuyến tính đàn hồi, độ cứng cao</li>
  <li>Giai đoạn 25-50%: Chuyển tiếp, độ cứng giảm</li>
  <li>Giai đoạn 50%+: Chảy dẻo, độ cứng lớn giảm, tiến tới trạng thái tới hạn</li>
</ul>

<h4 id="biểu-đồ-2-quá-trình-ứng-suất-p-q-plane">Biểu Đồ 2: Quá trình ứng suất (p-q Plane)</h4>

<p>Đường dẫn ứng suất (stress path) là quỹ tích các điểm ứng suất từ trạng thái ban đầu đến cuối:</p>

<p>\(\text{Trục X}: p' = \frac{\sigma_1' + 2\sigma_3'}{3}\)
\(\text{Trục Y}: q = \sigma_1' - \sigma_3'\)</p>

<p><strong>Các Đường Tham Chiếu:</strong></p>
<ul>
  <li><strong>Mặt Chảy Ban Đầu</strong>: Ellipse với \(p_c = 150\) kPa</li>
  <li><strong>Mặt Chảy Cuối Cùng</strong>: Ellipse sau khi cố kết tăng (nếu có)</li>
  <li><strong>Đường Trạng Thái Tới Hạn</strong>: Đường \(q = M \cdot p'\) (độ dốc = 0.95)</li>
</ul>

<h4 id="biểu-đồ-3-biến-dạng-thể-tích-và-áp-lực-nước-lỗ-rỗng">Biểu Đồ 3: Biến dạng thể tích và Áp lực nước lỗ rỗng</h4>

<p><strong>Triaxial Drained:</strong>
\(\text{Trục X}: \varepsilon_v = \varepsilon_1 + \varepsilon_2 + \varepsilon_3\)
\(\text{Trục Y}: p' \text{ (kPa)}\)</p>

<p>Thể hiện sự thay đổi áp suất hiệu với sự giãn nở/co lại thể tích.</p>

<p><strong>Triaxial Undrained:</strong>
\(\text{Trục X}: \varepsilon_a (\%)\)
\(\text{Trục Y}: u = p_0 + \frac{q}{3} - p' \text{ (kPa)}\)</p>

<p>Thể hiện sự phát triển áp lực nước lỗ rỗng trong điều kiện không thoát nước.</p>

<h4 id="biểu-đồ-4-hệ-số-rỗng-vs-logp">Biểu Đồ 4: Hệ số rỗng vs Log(p’)</h4>

<p>\(\text{Trục X}: \log_{10}(p') \text{ (kPa)}\)
\(\text{Trục Y}: e = V - 1.0\)</p>

<p>Cho thấy quá trình nén của đất được kiểm soát bởi thông số \(\lambda\) và \(\kappa\).</p>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Create comprehensive 2x2 subplot layout</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plot</span><span class="x">(</span><span class="n">size</span><span class="o">=</span><span class="x">(</span><span class="mi">1200</span><span class="x">,</span> <span class="mi">1000</span><span class="x">),</span> <span class="n">layout</span><span class="o">=</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="mi">2</span><span class="x">),</span> <span class="n">legend</span><span class="o">=:</span><span class="n">topright</span><span class="x">)</span>

<span class="c"># Subplot 1: Deviatoric Stress vs Axial Strain</span>
<span class="n">plot!</span><span class="x">(</span><span class="mi">1</span><span class="x">,</span> <span class="n">es</span><span class="x">,</span> <span class="n">q</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"q vs εₐ"</span><span class="x">,</span> 
      <span class="n">xlabel</span><span class="o">=</span><span class="s">"Axial strain, εₐ (%)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Deviatoric Stress, q (kPa)"</span><span class="x">,</span> 
      <span class="n">title</span><span class="o">=</span><span class="s">"Deviatoric Stress vs Axial Strain"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">)</span>

<span class="c"># Subplot 2: Stress Path (p-q plane with yield surfaces)</span>
<span class="k">if</span> <span class="n">analysis</span> <span class="o">==</span> <span class="mi">1</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p</span><span class="x">,</span> <span class="n">q</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Stress Path"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span>
          <span class="n">xlabel</span><span class="o">=</span><span class="s">"Mean Stress, p (kPa)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Deviatoric Stress, q (kPa)"</span><span class="x">,</span>
          <span class="n">title</span><span class="o">=</span><span class="s">"Stress Path in p-q Plane (Drained)"</span><span class="x">)</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p_ini_yield</span><span class="x">,</span> <span class="n">qy_ini</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Initial Yield"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">)</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p_fyield</span><span class="x">,</span> <span class="n">qyf</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Final Yield"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">)</span>
<span class="k">else</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p</span><span class="x">,</span> <span class="n">q</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Stress Path"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span>
          <span class="n">xlabel</span><span class="o">=</span><span class="s">"Mean Stress, p (kPa)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Deviatoric Stress, q (kPa)"</span><span class="x">,</span>
          <span class="n">title</span><span class="o">=</span><span class="s">"Stress Path in p-q Plane (Undrained)"</span><span class="x">)</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p_ini_yield</span><span class="x">,</span> <span class="n">q_ini_yield</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"CSL"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">)</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p_ini_yield</span><span class="x">,</span> <span class="n">qy_ini</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Initial Yield"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">)</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">2</span><span class="x">,</span> <span class="n">p_fyield</span><span class="x">,</span> <span class="n">qyf</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Final Yield"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">)</span>
<span class="k">end</span>

<span class="c"># Subplot 3: Volumetric/Undrained Response</span>
<span class="k">if</span> <span class="n">analysis</span> <span class="o">==</span> <span class="mi">1</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">3</span><span class="x">,</span> <span class="n">epsV</span><span class="x">,</span> <span class="n">p</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"εᵥ vs p"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span>
          <span class="n">xlabel</span><span class="o">=</span><span class="s">"Volumetric Strain, εᵥ (%)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Mean Effective Stress, p (kPa)"</span><span class="x">,</span>
          <span class="n">title</span><span class="o">=</span><span class="s">"Volumetric Response (Drained)"</span><span class="x">)</span>
<span class="k">else</span>
    <span class="n">plot!</span><span class="x">(</span><span class="mi">3</span><span class="x">,</span> <span class="n">es</span><span class="x">,</span> <span class="n">u</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"u vs εₐ"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span>
          <span class="n">xlabel</span><span class="o">=</span><span class="s">"Axial strain, εₐ (%)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Excess Pore Water Pressure, u (kPa)"</span><span class="x">,</span>
          <span class="n">title</span><span class="o">=</span><span class="s">"Pore Pressure Response (Undrained)"</span><span class="x">)</span>
<span class="k">end</span>

<span class="c"># Subplot 4: Void Ratio vs Log(p) - NCL and CSL</span>
<span class="n">plot!</span><span class="x">(</span><span class="mi">4</span><span class="x">,</span> <span class="n">p</span><span class="x">,</span> <span class="n">void</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"Test Path"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">xscale</span><span class="o">=:</span><span class="n">log10</span><span class="x">,</span>
      <span class="n">xlabel</span><span class="o">=</span><span class="s">"Mean Effective Stress (kPa)"</span><span class="x">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s">"Void Ratio, e"</span><span class="x">,</span>
      <span class="n">title</span><span class="o">=</span><span class="s">"Void Ratio vs Log(p)"</span><span class="x">)</span>
<span class="n">plot!</span><span class="x">(</span><span class="mi">4</span><span class="x">,</span> <span class="n">pNCL</span><span class="x">,</span> <span class="n">eNCL</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"NCL"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">,</span> <span class="n">xscale</span><span class="o">=:</span><span class="n">log10</span><span class="x">)</span>
<span class="n">plot!</span><span class="x">(</span><span class="mi">4</span><span class="x">,</span> <span class="n">pCSL</span><span class="x">,</span> <span class="n">eCSL</span><span class="x">,</span> <span class="n">label</span><span class="o">=</span><span class="s">"CSL"</span><span class="x">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="x">,</span> <span class="n">linestyle</span><span class="o">=:</span><span class="n">dash</span><span class="x">,</span> <span class="n">xscale</span><span class="o">=:</span><span class="n">log10</span><span class="x">)</span>

<span class="n">fig</span>
</code></pre></div></div>

<h3 id="33-xuất-kết-quả">3.3 Xuất Kết Quả</h3>

<p>Mô phỏng xuất ra các kết quả dưới dạng tệp CSV và PNG:</p>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Create Output directory if it doesn't exist</span>
<span class="n">output_dir</span> <span class="o">=</span> <span class="s">"Output"</span>
<span class="k">if</span> <span class="o">!</span><span class="n">isdir</span><span class="x">(</span><span class="n">output_dir</span><span class="x">)</span>
    <span class="n">mkdir</span><span class="x">(</span><span class="n">output_dir</span><span class="x">)</span>
<span class="k">end</span>

<span class="n">println</span><span class="x">(</span><span class="s">"</span><span class="se">\n</span><span class="s">Saving results to </span><span class="si">$$</span><span class="s">output_dir/..."</span><span class="x">)</span>

<span class="c"># Save plots</span>
<span class="n">savefig</span><span class="x">(</span><span class="n">fig</span><span class="x">,</span> <span class="n">joinpath</span><span class="x">(</span><span class="n">output_dir</span><span class="x">,</span> <span class="s">"MCC_Results_2x2.png"</span><span class="x">))</span>
<span class="n">println</span><span class="x">(</span><span class="s">"✓ Saved: MCC_Results_2x2.png"</span><span class="x">)</span>

<span class="c"># Prepare data for export</span>
<span class="n">data_export</span> <span class="o">=</span> <span class="n">hcat</span><span class="x">(</span><span class="n">es</span><span class="x">,</span> <span class="n">p</span><span class="x">,</span> <span class="n">q</span><span class="x">,</span> <span class="n">u</span><span class="x">,</span> <span class="n">void</span><span class="x">,</span> <span class="n">epsV</span><span class="x">,</span> <span class="n">epsD</span><span class="x">)</span>

<span class="c"># Save data to CSV</span>
<span class="n">open</span><span class="x">(</span><span class="n">joinpath</span><span class="x">(</span><span class="n">output_dir</span><span class="x">,</span> <span class="s">"MCC_Results.csv"</span><span class="x">),</span> <span class="s">"w"</span><span class="x">)</span> <span class="k">do</span> <span class="n">io</span>
    <span class="n">writedlm</span><span class="x">(</span><span class="n">io</span><span class="x">,</span> <span class="x">[</span><span class="s">"Strain(%)"</span> <span class="s">"p(kPa)"</span> <span class="s">"q(kPa)"</span> <span class="s">"u(kPa)"</span> <span class="s">"void_ratio"</span> <span class="s">"epsV(%)"</span> <span class="s">"epsD(%)"</span><span class="x">],</span> <span class="sc">','</span><span class="x">)</span>
    <span class="n">writedlm</span><span class="x">(</span><span class="n">io</span><span class="x">,</span> <span class="n">data_export</span><span class="x">,</span> <span class="sc">','</span><span class="x">)</span>
<span class="k">end</span>
<span class="n">println</span><span class="x">(</span><span class="s">"✓ Saved: MCC_Results.csv"</span><span class="x">)</span>

<span class="c"># Save individual result arrays</span>
<span class="k">for</span> <span class="x">(</span><span class="n">name</span><span class="x">,</span> <span class="n">data</span><span class="x">)</span> <span class="k">in</span> <span class="x">[(</span><span class="s">"stress_p"</span><span class="x">,</span> <span class="n">p</span><span class="x">),</span> <span class="x">(</span><span class="s">"stress_q"</span><span class="x">,</span> <span class="n">q</span><span class="x">),</span> <span class="x">(</span><span class="s">"void_ratio"</span><span class="x">,</span> <span class="n">void</span><span class="x">),</span> 
                     <span class="x">(</span><span class="s">"strain_axial"</span><span class="x">,</span> <span class="n">es</span><span class="x">),</span> <span class="x">(</span><span class="s">"pore_pressure_u"</span><span class="x">,</span> <span class="n">u</span><span class="x">)]</span>
    <span class="n">open</span><span class="x">(</span><span class="n">joinpath</span><span class="x">(</span><span class="n">output_dir</span><span class="x">,</span> <span class="s">"</span><span class="si">$$(name)</span><span class="s">.csv"</span><span class="x">),</span> <span class="s">"w"</span><span class="x">)</span> <span class="k">do</span> <span class="n">io</span>
        <span class="n">writedlm</span><span class="x">(</span><span class="n">io</span><span class="x">,</span> <span class="n">data</span><span class="x">)</span>
    <span class="k">end</span>
    <span class="n">println</span><span class="x">(</span><span class="s">"✓ Saved: </span><span class="si">$$(name)</span><span class="s">.csv"</span><span class="x">)</span>
<span class="k">end</span>
</code></pre></div></div>

<p><strong>Tệp Xuất:</strong></p>
<ul>
  <li><strong>MCC_Results_2x2.png</strong>: Biểu đồ 2×2 tổng hợp</li>
  <li><strong>MCC_Results.csv</strong>: Bảng dữ liệu đầy đủ (7500 hàng × 7 cột)</li>
  <li><strong>stress_p.csv, stress_q.csv</strong>: Ứng suất hữu hiệu và lệch theo từng bước</li>
  <li><strong>void_ratio.csv</strong>: Hệ số rỗng theo quá trình tải</li>
  <li><strong>strain_axial.csv, pore_pressure_u.csv</strong>: Biến dạng trục và áp lực nước lỗ rỗng</li>
</ul>

<hr />

<h2 id="4-phân-tích-kết-quả">4. Phân tích kết quả</h2>

<h3 id="41-phân-tích-ứng-suất---biến-dạng-q-εₐ">4.1 Phân tích Ứng suất - Biến dạng (q-εₐ)</h3>

<p>Đường cong q-εₐ thường có ba giai đoạn:</p>

<ol>
  <li><strong>Giai đoạn 0-2% (Đàn hồi)</strong>: Độ dốc cao, hành vi gần như tuyến tính
    <ul>
      <li>Đất chưa chảy, chỉ chịu nén đàn hồi</li>
      <li>\(K\) và \(G\) là hằng số</li>
    </ul>
  </li>
  <li><strong>Giai đoạn 2-25% (Chuyển tiếp)</strong>: Độ dốc giảm dần
    <ul>
      <li>Đất bắt đầu chảy (yield)</li>
      <li>Độ cứng giảm dần từ \(E_0\) (stiffness ban đầu) đến \(E_f\) (cuối cùng)</li>
    </ul>
  </li>
  <li><strong>Giai đoạn 25%+ (Chảy dẻo)</strong>: Độ dốc gần như bằng không
    <ul>
      <li>Đất tuân theo quy luật chảy dẻo (flow rule)</li>
      <li>Tiến tới trạng thái tới hạn (Critical State)</li>
    </ul>
  </li>
</ol>

<h3 id="42-đường-quá-trình-ứng-suất-p-q">4.2 Đường quá trình ứng suất (p-q)</h3>

<p>Trong phương pháp p-q, đường quá trình ứng suất cho biết:</p>

<ul>
  <li><strong>Vị trí ban đầu</strong>: \((p_0, 0)\)</li>
  <li><strong>Hình dạng</strong>: Tùy thuộc vào loại thử nghiệm
    <ul>
      <li><em>Drained</em>: Đường quá trình có thể quay về trái (p’ giảm do thể tích nở)</li>
      <li><em>Undrained</em>: Đường trực tiếp hướng lên trên (p’ tăng do u tăng)</li>
    </ul>
  </li>
  <li><strong>Điểm cuối cùng</strong>: Gần hoặc trên đường CSL</li>
</ul>

<h3 id="43-biến-dạng-thể-tích-εᵥ-p">4.3 Biến dạng thể tích (εᵥ-p’)</h3>

<p><strong>Triaxial Drained:</strong></p>
<ul>
  <li>Đất nén lại ở đầu (co thể tích, εᵥ &lt; 0) vì áp suất tăng</li>
  <li>Sau đó giãn nở (εᵥ &gt; 0) khi chảy dẻo vì tiến tới trạng thái tới hạn</li>
  <li>Đây gọi là <strong>Dilatancy</strong> - sự giãn nở trong quá trình cắt dẻo</li>
</ul>

<p><strong>Triaxial Undrained:</strong></p>
<ul>
  <li>Thể tích tổng không đổi (εᵥ_total = 0)</li>
  <li>Áp lực nước lỗ rỗng tăng vì không thể thoát nước</li>
  <li>Ứng suất hữu hiệu p’ có thể giảm → phát triển “vòi phun” (liquefaction)</li>
</ul>

<h3 id="44-hệ-số-rỗng-vs-logp">4.4 Hệ số rỗng vs Log(p’)</h3>

<p>Quan hệ e-ln(p’) cho thấy:</p>
<ul>
  <li><strong>Dốc NCL</strong> = \(\lambda\) (nén bình thường)</li>
  <li><strong>Dốc CSL</strong> = \(\lambda\) (song song với NCL)</li>
  <li><strong>Khoảng cách CSL-NCL</strong> = \(\Gamma\) (tham số trạng thái)</li>
  <li>Đất cố kết quá mức (OCR &gt; 1) nằm phía trên NCL</li>
</ul>

<hr />

<h2 id="5-ưu-điểm-lập-trình-julia-so-với-các-ngôn-ngữ-khác">5. Ưu Điểm lập trình Julia so với các Ngôn ngữ khác</h2>

<h3 id="51-hiệu-suất-tính-toán">5.1 Hiệu Suất Tính Toán</h3>

<p>Julia là ngôn ngữ được thiết kế đặc biệt cho tính toán khoa học:</p>

<table>
  <thead>
    <tr>
      <th>Tác Vụ</th>
      <th>Python (NumPy)</th>
      <th>MATLAB</th>
      <th>Julia</th>
      <th>Cải Thiện</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>7500 vòng lặp ma trận</td>
      <td>~45s</td>
      <td>~30s</td>
      <td>~2s</td>
      <td>15-20× nhanh hơn</td>
    </tr>
    <tr>
      <td>Biên dịch trước</td>
      <td>✗</td>
      <td>✗</td>
      <td>✓</td>
      <td>Không có overhead startup</td>
    </tr>
    <tr>
      <td>Năng suất bộ nhớ</td>
      <td>Cao</td>
      <td>Cao</td>
      <td>Thấp</td>
      <td>Sử dụng 30-50% ít hơn</td>
    </tr>
  </tbody>
</table>

<h3 id="52-cú-pháp-thân-thiện">5.2 Cú Pháp Thân Thiện</h3>

<p>Julia kết hợp tính dễ đọc của Python với hiệu suất của C/Fortran:</p>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Ký hiệu toán học trực tiếp trong code</span>
<span class="n">λ</span> <span class="o">=</span> <span class="mf">0.2</span>              <span class="c"># Thay vì lambda = 0.2</span>
<span class="n">κ</span> <span class="o">=</span> <span class="mf">0.04</span>             <span class="c"># Thay vì kappa = 0.04</span>
<span class="n">ν</span> <span class="o">=</span> <span class="mf">0.15</span>             <span class="c"># Thay vì nu = 0.15</span>

<span class="c"># Phép toán ma trận tự nhiên</span>
<span class="n">D</span> <span class="o">=</span> <span class="n">De</span> <span class="o">-</span> <span class="x">(</span><span class="n">numerator</span> <span class="o">./</span> <span class="n">denominator</span><span class="x">)</span>  <span class="c"># Broadcasting tự động</span>
</code></pre></div></div>

<h3 id="53-tích-hợp-đa-nền-tảng">5.3 Tích hợp đa nền tảng</h3>

<div class="language-julia highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Cùng code chạy trên Windows, macOS, Linux mà không sửa</span>
<span class="n">julia</span> <span class="n">run_mcc</span><span class="o">.</span><span class="n">jl</span>  <span class="c"># Linux/macOS</span>
<span class="n">julia</span><span class="o">.</span><span class="n">exe</span> <span class="n">run_mcc</span><span class="o">.</span><span class="n">jl</span>  <span class="c"># Windows</span>
</code></pre></div></div>

<hr />

<h2 id="6-ứng-dụng--mở-rộng">6. Ứng Dụng &amp; Mở Rộng</h2>

<h3 id="61-tham-số-hóa-cho-các-loại-đất">6.1 Tham Số Hóa cho Các Loại Đất</h3>

<p>Bảng thông số tiêu chuẩn cho các loại đất:</p>

<table>
  <thead>
    <tr>
      <th>Loại Đất</th>
      <th>\(M\)</th>
      <th>\(\lambda\)</th>
      <th>\(\kappa\)</th>
      <th>\(N\)</th>
      <th>\(\nu\)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sét Bangkok</td>
      <td>0.92</td>
      <td>0.18</td>
      <td>0.035</td>
      <td>2.3</td>
      <td>0.18</td>
    </tr>
    <tr>
      <td>Sét Mexico City</td>
      <td>0.95</td>
      <td>0.24</td>
      <td>0.050</td>
      <td>2.8</td>
      <td>0.20</td>
    </tr>
    <tr>
      <td>Sét Boom</td>
      <td>0.88</td>
      <td>0.16</td>
      <td>0.030</td>
      <td>2.1</td>
      <td>0.15</td>
    </tr>
    <tr>
      <td>Sét cực mịn</td>
      <td>1.00</td>
      <td>0.25</td>
      <td>0.055</td>
      <td>3.0</td>
      <td>0.22</td>
    </tr>
  </tbody>
</table>

<h3 id="62-phát-triển-mở-rộng">6.2 Phát triển mở rộng</h3>

<ol>
  <li><strong>Mô hình Mặt chảy nâng cao</strong>
    <ul>
      <li>Lade-Duncan yield surface</li>
      <li>Matsuoka-Nakai model</li>
      <li>MIT-E3 model</li>
    </ul>
  </li>
  <li><strong>Cơ học đất nâng cao</strong>
    <ul>
      <li>Tải trọng động (Cyclic loading)</li>
      <li>Ảnh hưởng dị hướng (Anisotropy)</li>
      <li>Mô hình phụ thuộc ứng suất biến dạng(Stress-strain path dependency)</li>
    </ul>
  </li>
  <li><strong>Phân tích số</strong>
    <ul>
      <li>Phương pháp phần tử hữu hạn (FEM) 2D/3D</li>
      <li>Phương pháp sai phân hữu hạn (FDM)</li>
      <li>Mô phỏng động lực học rõ ràng</li>
    </ul>
  </li>
</ol>

<hr />

<h2 id="7-kết-luận">7. Kết Luận</h2>

<p>Bài viết này đã trình bày:</p>

<p>✓ <strong>Lý Thuyết MCC</strong>: Mặt chảy ellipse, NCL, CSL, quy luật chảy<br />
✓ <strong>Phân Tích Kết Quả</strong>: Các biểu đồ toàn diện
✓ <strong>Ứng Dụng Thực</strong>: Từ lý thuyết đến mô phỏng số</p>

<p><strong>Mô hình MCC</strong> là công cụ cơ bản không thể thiếu trong:</p>
<ul>
  <li>Thiết kế nền móng</li>
  <li>Phân tích ổn định công trình</li>
  <li>Dự báo chuyển vị của công trình</li>
  <li>Nghiên cứu địa kỹ thuật tiên tiến</li>
</ul>

<hr />

<h2 id="tài-liệu-tham-khảo">Tài Liệu Tham Khảo</h2>

<ol>
  <li>Atkinson, J. H., &amp; Bransby, P. L. (1978). <em>The Mechanics of Soils and Foundations</em>. McGraw-Hill.</li>
  <li>Roscoe, K. H., &amp; Burland, J. B. (1968). On the generalized stress-strain behaviour of wet clay. In <em>Engineering Plasticity</em>. Cambridge University Press.</li>
  <li>Wood, D. M. (1990). <em>Soil Behaviour and Critical State Soil Mechanics</em>. Cambridge University Press.</li>
  <li>Muir Wood, D. (2009). *Soil Behaviour and Critical State</li>
</ol>

<hr />

<p><em>Bài viết này được tạo bằng Julia 1.9.4 với Plots.jl, GR backend.</em><br />
<strong>Cập nhật lần cuối</strong>: 2025-12-21 15:30 UTC+7</p>]]></content><author><name>Hydro Structure AI</name></author><category term="Geotechnical Engineering" /><category term="Computational Mechanics" /><category term="Geotechnical" /><category term="Soil Mechanics" /><category term="MCC" /><category term="Julia" /><category term="Constitutive Model" /><category term="Triaxial Test" /><summary type="html"><![CDATA[Tổng Quan]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://hydrostructai.github.io/assets/images/posts/2025-12-21-camclay/mcc-stress-path.png" /><media:content medium="image" url="https://hydrostructai.github.io/assets/images/posts/2025-12-21-camclay/mcc-stress-path.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Phân Tích Tiết Diện dầm Sử Dụng Thư viện Python SectionProperties</title><link href="https://hydrostructai.github.io/structural%20engineering/2d%20analysis/cross-section-mesh/" rel="alternate" type="text/html" title="Phân Tích Tiết Diện dầm Sử Dụng Thư viện Python SectionProperties" /><published>2025-12-19T10:00:00+07:00</published><updated>2025-12-19T10:00:00+07:00</updated><id>https://hydrostructai.github.io/structural%20engineering/2d%20analysis/cross-section-mesh</id><content type="html" xml:base="https://hydrostructai.github.io/structural%20engineering/2d%20analysis/cross-section-mesh/"><![CDATA[<h2 id="tổng-quan">Tổng Quan</h2>
<p>Bài viết minh họa phân tích cấu trúc tự động của tiết diện dầm bê tông sử dụng gói Python mã nguồn mở <code class="language-plaintext highlighter-rouge">sectionproperties</code>. 
Phân tích bao gồm:</p>
<ol>
  <li><strong>Định Nghĩa Vật Liệu</strong>: Bê tông với các tính chất đàn hồi</li>
  <li><strong>Tạo Hình Học</strong>: Tiết diện dầm được định nghĩa theo chương trình (thay thế nhập DXF)</li>
  <li><strong>Tạo Lưới</strong>: Tạo lưới phần tử hữu hạn</li>
  <li><strong>Tính Toán Tính Chất</strong>: Tính chất hình học, uốn và dẻo</li>
  <li><strong>Phân Tích Độ Cứng</strong>: Độ cứng trục, uốn và xoắn</li>
  <li><strong>Phân Tích Ứng Suất</strong>: Nhiều trường hợp tải với trực quan hóa</li>
  <li><strong>Vòng Mohr</strong>: Trực quan hóa trạng thái ứng suất tới hạn</li>
</ol>

<h2 id="tiết-diện-thiết-kế">Tiết Diện Thiết Kế</h2>

<p><strong>Tiết Diện dầm Bê Tông</strong></p>
<ul>
  <li>Vật liệu: Bê tông (E = 30,1 GPa, ν = 0,2)</li>
  <li>Kích thước lưới: 60 mm²</li>
  <li>Tải Áp Dụng:
    <ul>
      <li>Lực dọc trục: 10 kN</li>
      <li>Mô-men Uốn (M_xx): 10 kN·m</li>
      <li>Lực cắt theo phương x (V_x): 25 kN</li>
      <li>Lực cắt theo phương y (V_y): 50 kN</li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="1-nhập-các-thư-viện-cần-thiết">1. Nhập Các Thư Viện Cần Thiết</h2>

<p>Nhập tất cả các thư viện cần thiết để tạo hình học, tạo lưới và phân tích phần tử hữu hạn.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="n">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">from</span> <span class="n">matplotlib.patches</span> <span class="kn">import</span> <span class="n">Circle</span>
<span class="kn">from</span> <span class="n">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span>

<span class="c1"># Nhập các mô-đun sectionproperties cho tạo hình học và định nghĩa vật liệu
</span><span class="kn">from</span> <span class="n">sectionproperties.pre.geometry</span> <span class="kn">import</span> <span class="n">Geometry</span>
<span class="kn">from</span> <span class="n">sectionproperties.pre.pre</span> <span class="kn">import</span> <span class="n">Material</span>

<span class="c1"># In thông báo xác nhận các thư viện đã được nhập thành công
</span><span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Thư viện được nhập thành công</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Phiên bản NumPy: </span><span class="si">{</span><span class="n">np</span><span class="p">.</span><span class="n">__version__</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Phiên bản Matplotlib: </span><span class="si">{</span><span class="n">plt</span><span class="p">.</span><span class="n">matplotlib</span><span class="p">.</span><span class="n">__version__</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<hr />

<h2 id="2-định-nghĩa-tính-chất-vật-liệu">2. Định Nghĩa Tính Chất Vật Liệu</h2>

<p>Tạo vật liệu Bê tông với các tính chất đàn hồi, cơ học và vật lý được chỉ định theo thông số kỹ thuật.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Định nghĩa các tính chất vật liệu cho bê tông (theo thông số kỹ thuật của nhiệm vụ)
</span><span class="n">concrete_properties</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">name</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">Bê Tông</span><span class="sh">"</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">elastic_modulus</span><span class="sh">"</span><span class="p">:</span> <span class="mf">30.1e3</span><span class="p">,</span>    <span class="c1"># MPa - Mô-đun đàn hồi (Young's modulus)
</span>    <span class="sh">"</span><span class="s">poissons_ratio</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.2</span><span class="p">,</span>        <span class="c1"># Tỷ lệ Poisson - độ co ngót 
</span>    <span class="sh">"</span><span class="s">density</span><span class="sh">"</span><span class="p">:</span> <span class="mf">2.4e-6</span><span class="p">,</span>            <span class="c1"># kg/mm³ - Mật độ của bê tông
</span>    <span class="sh">"</span><span class="s">yield_strength</span><span class="sh">"</span><span class="p">:</span> <span class="mi">32</span><span class="p">,</span>         <span class="c1"># MPa - Sức chịu nén của bê tông
</span>    <span class="sh">"</span><span class="s">color</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">lightgrey</span><span class="sh">"</span>          <span class="c1"># Màu sắc để vẽ trên biểu đồ
</span><span class="p">}</span>

<span class="c1"># Tạo đối tượng Material sectionproperties với các tính chất vật liệu định nghĩa ở trên
</span><span class="n">concrete</span> <span class="o">=</span> <span class="nc">Material</span><span class="p">(</span>
    <span class="n">name</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">name</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">elastic_modulus</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">elastic_modulus</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">poissons_ratio</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">poissons_ratio</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">density</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">density</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">yield_strength</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">yield_strength</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">color</span><span class="o">=</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">"</span><span class="s">color</span><span class="sh">"</span><span class="p">]</span>
<span class="p">)</span>

<span class="c1"># In bảng tóm tắt các tính chất vật liệu để xác minh
</span><span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="se">\n</span><span class="sh">"</span> <span class="o">+</span> <span class="sh">"</span><span class="s">=</span><span class="sh">"</span><span class="o">*</span><span class="mi">70</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">TÍNH CHẤT VẬT LIỆU - BÊ TÔNG</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">=</span><span class="sh">"</span><span class="o">*</span><span class="mi">70</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Tên:                     </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">name</span><span class="sh">'</span><span class="p">]</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Mô-đun Đàn Hồi (E):      </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">elastic_modulus</span><span class="sh">'</span><span class="p">]</span><span class="si">:</span><span class="p">,.</span><span class="mi">1</span><span class="n">f</span><span class="si">}</span><span class="s"> MPa</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Tỷ Lệ Poisson (ν):       </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">poissons_ratio</span><span class="sh">'</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Mật Độ (ρ):              </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">density</span><span class="sh">'</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">e</span><span class="si">}</span><span class="s"> kg/mm³</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Sức Chịu Nén (f_y):      </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">yield_strength</span><span class="sh">'</span><span class="p">]</span><span class="si">:</span><span class="p">,.</span><span class="mi">1</span><span class="n">f</span><span class="si">}</span><span class="s"> MPa</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Màu:                     </span><span class="si">{</span><span class="n">concrete_properties</span><span class="p">[</span><span class="sh">'</span><span class="s">color</span><span class="sh">'</span><span class="p">]</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<hr />

<h2 id="3-xây-dựng-hình-học-tiết-diện-dầm">3. Xây Dựng Hình Học Tiết Diện dầm</h2>

<p>Tải hình học tiết diện dầm từ tệp DXF. Hình học tiết diện dầm bê tông cầu điển hình với các đặc trưng sau:</p>
<ul>
  <li>Mặt trên rộng để chịu tải</li>
  <li>Lõi trung tâm rỗng để giảm khối lượng</li>
  <li>Các góc bo tròn cho sự mượt mà</li>
  <li>Các bức tường bên dày để chịu lực cắt</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">try</span><span class="p">:</span>
    <span class="c1"># Tải hình học từ tệp DXF
</span>    <span class="n">geom</span> <span class="o">=</span> <span class="n">Geometry</span><span class="p">.</span><span class="nf">from_dxf</span><span class="p">(</span><span class="n">dxf_filepath</span><span class="o">=</span><span class="sh">"</span><span class="s">./dxf/box-girder.dxf</span><span class="sh">"</span><span class="p">)</span> 
    <span class="c1"># Gán vật liệu bê tông cho hình học
</span>    <span class="n">geom</span><span class="p">.</span><span class="n">material</span> <span class="o">=</span> <span class="n">concrete</span> 
    <span class="c1"># Vẽ hình học trên màn hình
</span>    <span class="n">geom</span><span class="p">.</span><span class="nf">plot_geometry</span><span class="p">()</span> 
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Hình học được tải từ tệp DXF thành công</span><span class="sh">"</span><span class="p">)</span>
<span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    <span class="c1"># Nếu tệp DXF không tìm thấy, in thông báo lỗi
</span>    <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Không thể tải tệp DXF: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Sử dụng hình học được xác định lập trình...</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>
<p>Mặt cắt ngang dầm:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-section.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-section.png" alt="box-girder-section" />
  </a>
  <figcaption>Cross Section<sup>2</sup>.</figcaption>
</figure>
<hr />

<h2 id="4-tạo-lưới-phần-tử-hữu-hạn">4. Tạo Lưới Phần Tử Hữu Hạn</h2>

<p>Lưới hóa (meshing) là một bước cực kỳ quan trọng trong phân tích phần tử hữu hạn (FEA). Nó chia nhỏ hình học phức tạp thành các phần tử đơn giản mà máy tính có thể xử lý. Lưới trực tiếp ảnh hưởng đến:</p>
<ul>
  <li><strong>Độ chính xác</strong>: Lưới mịn cho kết quả chính xác hơn</li>
  <li><strong>Độ tin cậy</strong>: Lưới kém có thể cho kết quả sai</li>
  <li><strong>Thời gian tính toán</strong>: Lưới mịn tăng thời gian xử lý</li>
</ul>

<p>Cân bằng mật độ lưới là chìa khóa để tối ưu hóa: lưới mịn trong các vùng quan trọng nhưng lưới thô ở các vùng ít quan trọng.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Nhập module Section từ sectionproperties.analysis để thực hiện FEA
</span><span class="kn">from</span> <span class="n">sectionproperties.analysis</span> <span class="kn">import</span> <span class="n">Section</span>
<span class="c1"># Tạo lưới với kích thước phần tử 60 mm² (tối ưu cho độ chính xác và tốc độ)
</span><span class="n">geom</span><span class="p">.</span><span class="nf">create_mesh</span><span class="p">(</span><span class="n">mesh_sizes</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span> 
<span class="c1"># Tạo đối tượng Section cho phân tích phần tử hữu hạn
</span><span class="n">sec</span> <span class="o">=</span> <span class="nc">Section</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span> 
<span class="c1"># Hiển thị lưới trên màn hình để kiểm tra chất lượng
</span><span class="n">sec</span><span class="p">.</span><span class="nf">plot_mesh</span><span class="p">()</span> 
<span class="n">plt</span><span class="p">.</span><span class="nf">show</span><span class="p">()</span>
</code></pre></div></div>
<p>Lưới phần tử hữu hạn mặt cắt ngang dầm:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-mesh.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-mesh.png" alt="box-girder-mesh" />
  </a>
  <figcaption>Mesh<sup>2</sup>.</figcaption>
</figure>
<hr />

<h2 id="5-tính-toán-các-tính-chất-hình-học">5. Tính Toán Các Tính Chất Hình Học</h2>

<p>Sau khi tạo lưới phần tử, chúng ta có thể tính toán các tính chất hình học quan trọng của tiết diện, bao gồm:</p>
<ul>
  <li><strong>Tính chất hình học</strong>: Diện tích, tâm, mô-men quán tính</li>
  <li><strong>Tính chất uốn</strong>: Hằng số uốn và tính chất liên quan</li>
  <li><strong>Tính chất dẻo</strong>: Mô-men dẻo và vị trí tâm dẻo</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Tính toán tính chất hình học của tiết diện (diện tích, tâm, mô-men quán tính)
</span><span class="n">sec</span><span class="p">.</span><span class="nf">calculate_geometric_properties</span><span class="p">()</span> 
<span class="c1"># Tính toán tính chất uốn của tiết diện (deplanation, bimoment, torsion constant)
</span><span class="n">sec</span><span class="p">.</span><span class="nf">calculate_warping_properties</span><span class="p">()</span> 
<span class="c1"># Tính toán tính chất dẻo của tiết diện (plastic section modulus, plastic centroid)
</span><span class="n">sec</span><span class="p">.</span><span class="nf">calculate_plastic_properties</span><span class="p">()</span> 
<span class="c1"># Hiển thị tất cả kết quả tính toán với định dạng 2 chữ số thập phân
</span><span class="n">sec</span><span class="p">.</span><span class="nf">display_results</span><span class="p">(</span><span class="n">fmt</span><span class="o">=</span><span class="sh">"</span><span class="s">.2f</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<hr />

<h2 id="6-các-đặc-trưng-độ-cứng">6. Các Đặc trưng Độ Cứng</h2>

<p>Độ cứng là một chỉ số quan trọng cho biết tiết diện sẽ chống lại biến dạng như thế nào. Chúng ta sẽ tính ba loại độ cứng chính:</p>
<ul>
  <li><strong>Độ cứng trục (EA)</strong>: Chống lại lực kéo/nén</li>
  <li><strong>Độ cứng uốn (EI)</strong>: Chống lại mô-men uốn</li>
  <li><strong>Độ cứng xoắn (GJ)</strong>: Chống lại mô-men xoắn</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Tính độ cứng trục EA = E × A (chống lại lực kéo/nén)
</span><span class="n">ea</span> <span class="o">=</span> <span class="n">sec</span><span class="p">.</span><span class="nf">get_ea</span><span class="p">()</span> 
<span class="c1"># Tính độ cứng uốn EI = E × I (chống lại mô-men uốn) - chỉ lấy Ixx (quanh trục x)
</span><span class="n">eixx</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">sec</span><span class="p">.</span><span class="nf">get_eic</span><span class="p">()</span> 
<span class="c1"># Tính hằng số uốn EJ = E × J (liên quan đến uốn)
</span><span class="n">ej</span> <span class="o">=</span> <span class="n">sec</span><span class="p">.</span><span class="nf">get_ej</span><span class="p">()</span> 
<span class="c1"># Tính độ cứng xoắn GJ = G × J (chống lại mô-men xoắn)
</span><span class="n">gj</span> <span class="o">=</span> <span class="n">sec</span><span class="p">.</span><span class="nf">get_g_eff</span><span class="p">()</span> <span class="o">/</span> <span class="n">sec</span><span class="p">.</span><span class="nf">get_e_eff</span><span class="p">()</span> <span class="o">*</span> <span class="n">ej</span> 
<span class="c1"># In các kết quả độ cứng ở dạng ký hiệu khoa học
</span><span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Độ cứng trục (E.A): </span><span class="si">{</span><span class="n">ea</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">e</span><span class="si">}</span><span class="s"> N</span><span class="sh">"</span><span class="p">)</span> 
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Độ cứng uốn (E.I): </span><span class="si">{</span><span class="n">eixx</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">e</span><span class="si">}</span><span class="s"> N.mm2</span><span class="sh">"</span><span class="p">)</span> 
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Độ cứng xoắn (G.J): </span><span class="si">{</span><span class="n">gj</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">e</span><span class="si">}</span><span class="s"> N.mm2</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<hr />

<h2 id="7-trực-quan-hóa-các-tâm-hình-học">7. Trực Quan Hóa Các Tâm Hình Học</h2>

<p>Ngoài các tính chất cơ bản, chúng ta có thể trực quan hóa các tâm đặc biệt của tiết diện để hiểu rõ hơn về phân bố hình học:</p>
<ul>
  <li><strong>Tâm đàn hồi</strong>: Điểm tương tức tải trọng trục gây uốn</li>
  <li><strong>Tâm cắt</strong>: Điểm tương ứng tác dụng lực cắt để không gây xoắn</li>
  <li><strong>Tâm dẻo</strong>: Điểm tương ứng với chuyển động dẻo</li>
  <li><strong>Trục chính</strong>: Hướng của các mô-men quán tính chính</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Vẽ tất cả các tâm hình học quan trọng: tâm đàn hồi, tâm cắt, tâm dẻo, và trục chính
</span><span class="n">sec</span><span class="p">.</span><span class="nf">plot_centroids</span><span class="p">()</span>
</code></pre></div></div>
<p>Hiển thị trọng tâm hình học của mặt cắt:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-centroid.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-centroid.png" alt="box-girder-centroid" />
  </a>
  <figcaption>Section Centroid<sup>2</sup>.</figcaption>
</figure>
<hr />

<h2 id="8-phân-tích-ứng-suất">8. Phân Tích Ứng Suất</h2>

<p>Cuối cùng, chúng ta sẽ tính toán và trực quan hóa các ứng suất trong tiết diện. Giả sử tiết diện này thuộc nhịp trung tâm của một dầm đơn giản được gối tựa hai đầu. Dầm chịu một sự kết hợp các tải bên ngoài:</p>
<ul>
  <li><strong>N = 10 kN</strong>: Tải trục (kéo hoặc nén)</li>
  <li><strong>M_xx = 10 kN·m</strong>: Mô-men uốn quanh trục x (gây cong dầm)</li>
  <li><strong>V_x = 25 kN</strong>: Lực cắt theo hướng x</li>
  <li><strong>V_y = 50 kN</strong>: Lực cắt theo hướng y</li>
</ul>

<h3 id="ứng-suất-von-mises">Ứng Suất Von Mises</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Tính toán ứng suất trên toàn bộ tiết diện với các tải đã chỉ định
# N=10kN (tải trục), Mxx=10kNm (mô-men uốn), Vx=25kN, Vy=50kN (lực cắt)
</span><span class="n">stress</span> <span class="o">=</span> <span class="n">sec</span><span class="p">.</span><span class="nf">calculate_stress</span><span class="p">(</span><span class="n">n</span><span class="o">=</span><span class="mf">10e3</span><span class="p">,</span> <span class="n">mxx</span><span class="o">=</span><span class="mf">10e6</span><span class="p">,</span> <span class="n">vx</span><span class="o">=</span><span class="mf">25e3</span><span class="p">,</span> <span class="n">vy</span><span class="o">=</span><span class="mf">50e3</span><span class="p">)</span> 
<span class="c1"># Vẽ ứng suất Von Mises (tổng ứng suất tương đương) trên toàn bộ tiết diện
# normalize=False: không chuẩn hóa, hiển thị giá trị thực tế
</span><span class="n">stress</span><span class="p">.</span><span class="nf">plot_stress</span><span class="p">(</span><span class="n">stress</span><span class="o">=</span><span class="sh">"</span><span class="s">vm</span><span class="sh">"</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="sh">"</span><span class="s">{x:.2f}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>
<p>Biểu đồ ứng suất của mặt cắt Dầm:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-stress.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-stress.png" alt="box-girder-stress" />
  </a>
  <figcaption>Box Girder Stress<sup>2</sup>.</figcaption>
</figure>

<h3 id="trực-quan-hóa-vectơ-ứng-suất-cắt">Trực Quan Hóa Vectơ Ứng Suất Cắt</h3>

<p>Ngoài ứng suất Von Mises, chúng ta cũng có thể hiển thị các vectơ ứng suất cắt để thấy rõ hơn nơi và cách ứng suất cắt tập trung:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Vẽ trường vectơ ứng suất cắt theo hướng y (Vy) và ứng suất cắt Zxy
# Các vectơ cho thấy hướng và độ lớn của ứng suất cắt tại mỗi điểm
</span><span class="n">stress</span><span class="p">.</span><span class="nf">plot_stress_vector</span><span class="p">(</span><span class="n">stress</span><span class="o">=</span><span class="sh">"</span><span class="s">vy_zxy</span><span class="sh">"</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="sh">"</span><span class="s">{x:.2f}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>
<p>Biểu đồ Vectơ ứng suất cắt của mặt cắt Dầm:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-stress-vector.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-stress-vector.png" alt="box-girder-stress-vector" />
  </a>
  <figcaption>Stress Vector<sup>2</sup>.</figcaption>
</figure>

<h3 id="vòng-tròn-mohr-ứng-suất">Vòng tròn Mohr Ứng suất</h3>

<p>Vòng tròn Mohr là biểu đồ hình học giúp xác định ứng suất chính, ứng suất cắt cực đại, và trạng thái ứng suất tại một điểm cụ thể. Chúng ta sẽ vẽ Vòng Mohr tại điểm (x=500, y=325) - một điểm tới hạn trong tiết diện:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Vẽ Vòng Mohr tại điểm cụ thể (500, 325) mm để xác định ứng suất chính
# Điểm này được chọn vì gần ranh giới của tiết diện nơi ứng suất thường cao
</span><span class="n">stress</span><span class="p">.</span><span class="nf">plot_mohrs_circles</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">325</span><span class="p">)</span> 
<span class="c1"># Hiển thị tất cả các biểu đồ
</span><span class="n">plt</span><span class="p">.</span><span class="nf">show</span><span class="p">()</span>
</code></pre></div></div>
<p>Biểu đồ Vòng tròn Mohr ứng suất:</p>

<figure class="img-zoom-125">
  <a href="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-mohr.png">
    <img src="/assets/images/posts/2025-12-19-cross-section-mesh/box-girder-mohr.png" alt="box-girder-mohr" />
  </a>
  <figcaption>Mohr Circle<sup>2</sup>.</figcaption>
</figure>
<hr />

<h2 id="9-tóm-tắt-và-kết-luận">9. Tóm Tắt và Kết Luận</h2>

<p>Phân tích này kiểm tra chi tiết tiết diện dầm bê tông cầu trong các điều kiện tải kết hợp phức tạp bằng cách sử dụng các nguyên tắc phân tích phần tử hữu hạn (FEA). Các kết quả chính được tóm tắt dưới đây:</p>

<p><strong>Hình Học Tiết Diện:</strong></p>
<ul>
  <li>Tải từ tệp DXF (nếu khả dụng) hoặc được tạo lập trình</li>
  <li>Tiết diện dầm hình chữ nhật rỗng - tối ưu chi phí</li>
  <li>Các góc bo tròn - giảm tập trung ứng suất</li>
  <li>Bề dày tường bên - chịu lực cắt và uốn</li>
</ul>

<p><strong>Tính Chất Vật Liệu Bê Tông:</strong></p>
<ul>
  <li>Mô-đun Đàn Hồi (E): 30,1 kGPa = 30.100 MPa</li>
  <li>Tỷ Lệ Poisson (ν): 0,2 - độ co ngót của vật liệu</li>
  <li>Sức Chịu Nén: 32 MPa - sức chịu đựng tối đa</li>
  <li>Trọng lượng riêng: 2,4e-6 kg/mm³ - khối lượng trên đơn vị thể tích</li>
</ul>

<p><strong>Tính Chất Tiết Diện Tính Toán:</strong></p>
<ul>
  <li>Diện tích mặt cắt ngang (A) - chống lại tải trục</li>
  <li>Vị trí tâm (Cx, Cy) - điểm trọng tâm hình học</li>
  <li>Mô-men quán tính (Ixx, Iyy, Ixy) - chống lại uốn</li>
  <li>Hằng số uốn (J) - chống lại xoắn</li>
</ul>

<p><strong>Các Trường Hợp Tải Áp Dụng:</strong></p>
<ul>
  <li>Lực Trục: N = 10 kN</li>
  <li>Mô-men Uốn (quanh trục x): M_xx = 10 kN·m</li>
  <li>Lực Cắt theo x: V_x = 25 kN</li>
  <li>Lực Cắt theo y: V_y = 50 kN</li>
</ul>

<p>Phân tích hoàn chỉnh tạo ra các kết quả sau:</p>
<ol>
  <li><strong>Trực Quan Hóa Hình Học</strong>: Xác nhận hình học tiết diện dầm rỗng với các thành phần chính</li>
  <li><strong>Lưới Phần Tử Hữu Hạn</strong>: Chia tiết diện thành các phần tử 60 mm² để tinh chỉnh đầy đủ</li>
  <li><strong>Ma Trận Độ Cứng</strong>: Tính toán độ cứng trục (EA), uốn (EI), và xoắn (GJ)</li>
  <li><strong>Phân Bố Ứng Suất Von Mises</strong>: Hiển thị vùng chịu ứng suất cao trên toàn bộ tiết diện</li>
  <li><strong>Trường Vectơ Ứng Suất Cắt</strong>: Cho thấy mô hình tập trung ứng suất cắt</li>
  <li><strong>Phân Tích Tâm Hình Học</strong>: Xác định vị trí các tâm đàn hồi, dẻo, cắt và trục chính</li>
  <li><strong>Vòng tròn Mohr Ứng suất</strong>: Xác định ứng suất chính tại điểm tới hạn (500, 325)</li>
</ol>]]></content><author><name>Hydro Structure AI</name></author><category term="Structural Engineering" /><category term="2D Analysis" /><category term="Cross Section" /><category term="Mesh" /><summary type="html"><![CDATA[Tổng Quan Bài viết minh họa phân tích cấu trúc tự động của tiết diện dầm bê tông sử dụng gói Python mã nguồn mở sectionproperties. Phân tích bao gồm: Định Nghĩa Vật Liệu: Bê tông với các tính chất đàn hồi Tạo Hình Học: Tiết diện dầm được định nghĩa theo chương trình (thay thế nhập DXF) Tạo Lưới: Tạo lưới phần tử hữu hạn Tính Toán Tính Chất: Tính chất hình học, uốn và dẻo Phân Tích Độ Cứng: Độ cứng trục, uốn và xoắn Phân Tích Ứng Suất: Nhiều trường hợp tải với trực quan hóa Vòng Mohr: Trực quan hóa trạng thái ứng suất tới hạn]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://hydrostructai.github.io/assets/images/posts/2025-12-19-cross-section-mesh/box-girder.png" /><media:content medium="image" url="https://hydrostructai.github.io/assets/images/posts/2025-12-19-cross-section-mesh/box-girder.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Xây dựng Biểu đồ Tương tác Không gian 3D (P-Mx-My) cho Cột BTCT chịu nén hai phương</title><link href="https://hydrostructai.github.io/structural%20engineering/3d%20analysis/shortcol3d-development/" rel="alternate" type="text/html" title="Xây dựng Biểu đồ Tương tác Không gian 3D (P-Mx-My) cho Cột BTCT chịu nén hai phương" /><published>2025-12-13T10:00:00+07:00</published><updated>2025-12-13T10:00:00+07:00</updated><id>https://hydrostructai.github.io/structural%20engineering/3d%20analysis/shortcol3d-development</id><content type="html" xml:base="https://hydrostructai.github.io/structural%20engineering/3d%20analysis/shortcol3d-development/"><![CDATA[<h2 id="tại-sao-cần-biểu-đồ-tương-tác-3d">Tại Sao Cần Biểu Đồ Tương Tác 3D?</h2>

<h3 id="giới-hạn-của-phương-pháp-2d">Giới Hạn của Phương Pháp 2D</h3>

<p>Trong thiết kế kết cấu truyền thống, kỹ sư thường làm việc với <strong>biểu đồ tương tác P-M (2D)</strong>, cho cột chỉ chịu uốn quanh một trục chính duy nhất. Phương pháp này phù hợp với:</p>

<ul>
  <li>Cột không bị tác dụng momen xiên hay lực ngang tác dụng từ nhiều hướng</li>
  <li>Các trường hợp mà momen tập trung vào một phương chính</li>
</ul>

<p>Tuy nhiên, <strong>trong thực tế xây dựng hiện đại</strong>, nhiều cột phải chịu momen uốn trên <strong>cả hai phương (Mx và My)</strong> đồng thời:</p>

<ol>
  <li><strong>Cột góc nhà cao tầng</strong> - Tiếp nhận momen từ hai hướng dầm</li>
  <li><strong>Cột trên nút khung mặt phẳng xiên</strong> - Tải trọng gió tác dụng xiên</li>
  <li><strong>Cột chịu động đất</strong> - Gia tốc ngang từ nhiều phương</li>
  <li><strong>Cột cầu với dương cong</strong> - Tải trọng không đối xứng</li>
  <li><strong>Cột tiết diện đặc biệt</strong> (hình T, hình I) - Đặc tính hình học không đối xứng</li>
</ol>

<h3 id="những-sai-lầm-khi-sử-dụng-phương-pháp-2d">Những Sai Lầm Khi Sử Dụng Phương Pháp 2D</h3>

<p><strong>Phương pháp Bresler’s Load Contour</strong> là một cách tiếp cận phổ biến để xử lý momen hai phương:</p>

\[\frac{M_{ux}}{M_{ux0}} + \frac{M_{uy}}{M_{uy0}} \leq 1.0\]

<p>Hoặc công thức Bresler ba tham số:</p>

\[\frac{1}{P_u} = \frac{1}{P_{u0}} + \frac{1}{P_{ux}} + \frac{1}{P_{uy}} - \frac{2}{P_{b}}\]

<p>Tuy nhiên:</p>

<ul>
  <li><strong>❌ Không chính xác</strong>: Công thức Bresler là <strong>xấp xỉ</strong> chứ không phải <strong>giải pháp chính xác</strong></li>
  <li><strong>❌ Rủi ro bảo toàn</strong>: Trong một số trường hợp, xấp xỉ này quá bảo toàn; trong các trường hợp khác, nó <strong>không đủ bảo toàn</strong></li>
  <li><strong>❌ Không hỗ trợ các tiêu chuẩn khác nhau</strong>: Bresler được xây dựng cho ACI, không tương thích với EC2 hoặc TCVN</li>
  <li><strong>❌ Không phản ánh đúng bản chất vật lý</strong>: Công thức không dựa trên nguyên lý cơ học, chỉ là sự phù hợp dữ liệu thực nghiệm</li>
</ul>

<h3 id="phương-pháp-tương-thích-biến-dạng">Phương pháp tương thích biến dạng</h3>

<p><strong>Strain Compatibility Method trong</strong> - giải quyết bài toán trên bằng cách:</p>

<ol>
  <li><strong>Mô phỏng chính xác tiết diện</strong> thành hàng ngàn “sợi” nhỏ</li>
  <li><strong>Sử dụng biến dạng thật</strong> tại từng điểm trên tiết diện</li>
  <li><strong>Tích phân lực và momen</strong> cho mỗi tổ hợp biến dạng</li>
  <li><strong>Quét không gian biến dạng 3D</strong> để tìm toàn bộ bề mặt phá hoại</li>
</ol>

<p><strong>Kết quả</strong>: <strong>Bề mặt tương tác 3D liên tục (P-Mx-My)</strong> - không xấp xỉ, hạn chế sai sót lý thuyết.</p>

<hr />

<h2 id="so-sánh-thuật-toán-trên-với-03-tiêu-chuẩn">So Sánh Thuật Toán Trên với 03 Tiêu chuẩn</h2>

<h3 id="1-tcvn-55742018---chuẩn-việt-nam">1. TCVN 5574:2018 - Chuẩn Việt Nam</h3>

<h4 id="định-nghĩa-cường-độ">Định Nghĩa Cường Độ</h4>

<p>Tiêu chuẩn TCVN sử dụng <strong>cường độ thiết kế</strong> (design strength) trực tiếp mà không chia hệ số bảo toàn tường minh:</p>

\[R_b = f_{ck}^{design}\]

\[R_s = f_{yk}^{design}\]

<p>Hệ số bảo toàn đã được <strong>tích hợp vào trong các giá trị \(R_b, R_s\)</strong> từ khi công bố tiêu chuẩn.</p>

<h4 id="mô-hình-ứng-suất-bê-tông">Mô Hình Ứng Suất Bê Tông</h4>

<p>TCVN sử dụng <strong>khối ứng suất parabol-chữ nhật</strong>:</p>

\[\sigma_c = R_b \left[ 2 \frac{\varepsilon}{\varepsilon_{cu}} - \left( \frac{\varepsilon}{\varepsilon_{cu}} \right)^2 \right], \quad 0 \leq \varepsilon \leq \varepsilon_{cu}\]

<p>Với:</p>

\[\varepsilon_{cu} = 0.0035 \quad \text{(cố định)}\]

\[\alpha = 0.8 \quad \Rightarrow \quad a = 0.8 \times c\]

<h4 id="hệ-số-an-toàn-vật-liệu-implicit">Hệ Số An Toàn Vật Liệu (Implicit)</h4>

<ul>
  <li>Bê tông: \(\gamma_c \approx 1.3\) (tích hợp vào \(R_b\))</li>
  <li>Thép: \(\gamma_s \approx 1.15\) (tích hợp vào \(R_s\))</li>
</ul>

<h4 id="ưu-điểm--nhược-điểm">Ưu Điểm &amp; Nhược Điểm</h4>

<p>✅ <strong>Ưu điểm</strong>:</p>

<ul>
  <li>Đơn giản, dễ tính toán thủ công</li>
  <li>Phù hợp với quy chuẩn thiết kế Việt Nam</li>
  <li>Cường độ bê tông cao → Sức chịu cao</li>
</ul>

<p>❌ <strong>Nhược điểm</strong>:</p>

<ul>
  <li>Khó kiểm chứng tính bảo toàn (vì hệ số ẩn)</li>
  <li>Không phù hợp với tiêu chuẩn quốc tế</li>
  <li>Không linh hoạt khi điều chỉnh mức bảo toàn</li>
</ul>

<hr />

<h3 id="2-ec220042015---chuẩn-châu-âu">2. EC2:2004/2015 - Chuẩn Châu Âu</h3>

<h4 id="định-nghĩa-cường-độ-1">Định Nghĩa Cường Độ</h4>

<p>Eurocode 2 sử dụng <strong>cường độ đặc trưng</strong> (characteristic strength) chia cho <strong>hệ số bảo toàn rõ ràng</strong>:</p>

\[f_{cd} = \alpha_{cc} \times \frac{f_{ck}}{\gamma_c}\]

<p>Với:</p>

<ul>
  <li>\(\alpha_{cc} = 0.85\) (hệ số tuổi - độ dài thời gian)</li>
  <li>\(f_{ck}\) = cường độ đặc trưng (28 ngày)</li>
  <li>\(\gamma_c = 1.5\) (hệ số bảo toàn bê tông)</li>
</ul>

<p>Ví dụ:
\(f_{ck} = 30 \text{ MPa} \Rightarrow f_{cd} = 0.85 \times \frac{30}{1.5} = 17.0 \text{ MPa}\)</p>

<p>Thép:
\(f_{yd} = \frac{f_{yk}}{\gamma_s} = \frac{f_{yk}}{1.15}\)</p>

<h4 id="mô-hình-ứng-suất-bê-tông-1">Mô Hình Ứng Suất Bê Tông</h4>

<p>EC2 sử dụng <strong>khối ứng suất parabol-chữ nhật</strong> tương tự TCVN:</p>

\[\sigma_c = f_{cd} \left[ 1 - \left( 1 - \frac{\varepsilon}{\varepsilon_{c2}} \right)^n \right], \quad 0 \leq \varepsilon \leq \varepsilon_{cu3}\]

<p>Với:</p>

<ul>
  <li>\(\varepsilon_{c2} = 0.002\) (biến dạng tại ứng suất cực đại)</li>
  <li>\(\varepsilon_{cu3} = 0.0035\) (biến dạng cực hạn)</li>
  <li>\(n = 2\) (hệ số hình dạng)</li>
  <li>\(\lambda = 0.8\) (hệ số khối ứng suất)</li>
</ul>

<h4 id="hệ-số-an-toàn-vật-liệu-explicit">Hệ Số An Toàn Vật Liệu (Explicit)</h4>

<ul>
  <li>Bê tông: \(\gamma_c = 1.5\) (rõ ràng)</li>
  <li>Thép: \(\gamma_s = 1.15\) (rõ ràng)</li>
</ul>

<h4 id="đặc-điểm">Đặc Điểm</h4>

<p>✅ <strong>Ưu điểm</strong>:</p>

<ul>
  <li><strong>Minh bạch</strong>: Hệ số bảo toàn rõ ràng, dễ kiểm chứng</li>
  <li><strong>Bảo toàn cao</strong>: \(\gamma_c = 1.5\) rất an toàn (EC2 yêu cầu tiết diện lớn hơn)</li>
  <li><strong>Phù hợp quốc tế</strong>: Tiêu chuẩn EU được công nhận toàn cầu</li>
</ul>

<p>❌ <strong>Nhược điểm</strong>:</p>

<ul>
  <li>Cường độ thiết kế thấp hơn TCVN → Tiết diện lớn hơn</li>
  <li>Phức tạp hơn TCVN (công thức parabol)</li>
</ul>

<hr />

<h3 id="3-aci-318-19---chuẩn-mỹ">3. ACI 318-19 - Chuẩn Mỹ</h3>

<h4 id="định-nghĩa-cường-độ-2">Định Nghĩa Cường Độ</h4>

<p>ACI sử dụng <strong>cường độ danh định</strong> nhân với hệ số rút gọn:</p>

\[f_c'' = 0.85 f'_c\]

\[f_y = f_y \quad \text{(sử dụng danh định)}\]

<p>Ứng suất thiết kế:
\(\phi_c \times f_c'' = 0.75 \times 0.85 f'_c = 0.6375 f'_c\)</p>

<p>Với \(\phi_c = 0.75\) (hệ số rút gọn cho uốn + nén).</p>

<h4 id="mô-hình-ứng-suất-bê-tông---whitney-stress-block">Mô Hình Ứng Suất Bê Tông - Whitney Stress Block</h4>

<p>ACI sử dụng <strong>khối ứng suất chữ nhật tương đương</strong> (Whitney Stress Block):</p>

\[\sigma_c = 0.85 f'_c, \quad 0 \leq y \leq a\]

<p>Trong đó chiều cao khối ứng suất:</p>

\[a = \beta_1 \times c\]

<p>Với hệ số \(\beta_1\) <strong>biến đổi theo cường độ bê tông</strong>:</p>

\[\beta_1 = \begin{cases}
0.85 &amp; \text{nếu } f'_c \leq 28 \text{ MPa} \\
0.85 - 0.05 \times \frac{f'_c - 28}{7} &amp; \text{nếu } 28 &lt; f'_c \leq 55 \\
0.65 &amp; \text{nếu } f'_c &gt; 55 \text{ MPa}
\end{cases}\]

<h4 id="biến-dạng-cực-hạn---điểm-khác-biệt-chính">Biến Dạng Cực Hạn - Điểm khác biệt chính</h4>

\[\varepsilon_{cu} = 0.003 \quad \text{(nhỏ hơn EC2/TCVN)}\]

<p><strong>Hệ quả vật lý</strong>:</p>

<ul>
  <li>Vùng nén <strong>phải lớn hơn</strong> để chứa biến dạng nhỏ hơn</li>
  <li>Trục trung hòa <strong>cao hơn</strong> → Đòn bẩy <strong>nhỏ hơn</strong></li>
  <li>Khả năng chịu uốn <strong>thấp hơn</strong> → <strong>Bảo toàn hơn</strong></li>
</ul>

<h4 id="hệ-số-an-toàn-explicit-nhưng-khác-biệt">Hệ Số An Toàn (Explicit nhưng khác biệt)</h4>

<ul>
  <li>Hệ số rút gọn: \(\phi = 0.75\) (cho uốn + nén)</li>
  <li>Áp dụng <strong>sau</strong> tính toán sức chịu (không tích hợp vào \(f_c''\))</li>
  <li><strong>Linh hoạt</strong>: Có thể thay đổi tùy theo điều kiện thiết kế</li>
</ul>

<hr />

<h3 id="bảng-so-sánh-tổng-hợp-3-tiêu-chuẩn">Bảng So Sánh Tổng Hợp 3 Tiêu Chuẩn</h3>

<table>
  <thead>
    <tr>
      <th>Khía Cạnh</th>
      <th>TCVN 5574:2018</th>
      <th>EC2:2004/2015</th>
      <th>ACI 318-19</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Cường độ bê tông</strong></td>
      <td>\(R_b = f_{ck}\) (100%)</td>
      <td>\(f_{cd} = 0.567 f_{ck}\) (57%)</td>
      <td>\(f_c'' = 0.85 f'_c\) (85%)</td>
    </tr>
    <tr>
      <td><strong>Biến dạng cực hạn</strong></td>
      <td>\(\varepsilon_{cu} = 0.0035\)</td>
      <td>\(\varepsilon_{cu} = 0.0035\)</td>
      <td>\(\varepsilon_{cu} = 0.003\) <strong>[Thấp hơn]</strong></td>
    </tr>
    <tr>
      <td><strong>Khối ứng suất</strong></td>
      <td>Parabol-Chữ nhật</td>
      <td>Parabol-Chữ nhật</td>
      <td>Chữ nhật (Whitney)</td>
    </tr>
    <tr>
      <td><strong>Hệ số khối</strong></td>
      <td>\(\alpha = 0.8\) (cố định)</td>
      <td>\(\lambda = 0.8\) (cố định)</td>
      <td>\(\beta_1 = f(f'_c)\) <strong>[Biến đổi]</strong></td>
    </tr>
    <tr>
      <td><strong>Hệ số bảo toàn</strong></td>
      <td>\(\gamma_c \approx 1.3\) (ẩn)</td>
      <td>\(\gamma_c = 1.5\) (rõ ràng)</td>
      <td>\(\phi = 0.75\) (sau tính toán)</td>
    </tr>
    <tr>
      <td><strong>Độ tin cậy</strong></td>
      <td>❌ Thấp</td>
      <td>✅ Cao</td>
      <td>✅ Cao</td>
    </tr>
    <tr>
      <td><strong>Bảo toàn</strong></td>
      <td>🟡 Vừa phải</td>
      <td>✅ Cao nhất</td>
      <td>✅ Cao</td>
    </tr>
  </tbody>
</table>

<p><strong>Kết luận thực tế</strong>: Để đạt cùng khả năng chịu lực:</p>

<ul>
  <li><strong>EC2 yêu cầu tiết diện lớn nhất</strong> (hệ số 1.5 rất bảo toàn)</li>
  <li><strong>ACI yêu cầu tiết diện trung bình</strong> (biến dạng 0.003 bảo toàn)</li>
  <li><strong>TCVN yêu cầu tiết diện nhỏ nhất</strong> (hệ số ẩn ~1.3)</li>
</ul>

<hr />

<h2 id="thuật-toán-tích-phân-sợi-3d---cách-thức-hoạt-động">Thuật Toán Tích Phân Sợi 3D - Cách Thức Hoạt Động</h2>

<h3 id="định-nghĩa-không-gian-biến-dạng">Định Nghĩa Không Gian Biến Dạng</h3>

<p>Khác với 2D (chỉ quay quanh 1 trục), trong 3D chúng ta phải định nghĩa <strong>mặt phẳng biến dạng tổng quát</strong>:</p>

\[\varepsilon(x, y) = \varepsilon_0 + \kappa_x \cdot y - \kappa_y \cdot x\]

<p>Trong đó:</p>

<ul>
  <li>\(\varepsilon_0\) = biến dạng tại tâm tiết diện</li>
  <li>\(\kappa_x\) = độ cong quanh trục X</li>
  <li>\(\kappa_y\) = độ cong quanh trục Y</li>
</ul>

<p><strong>Không gian biến dạng 3D</strong>:
\((\varepsilon_0, \kappa_x, \kappa_y) \in \mathbb{R}^3\)</p>

<h3 id="bước-thực-thi-chính">Bước Thực Thi Chính</h3>

<h4 id="bước-1-rasterization---chia-lưới-sợi">Bước 1: Rasterization - Chia Lưới Sợi</h4>

<p>Tiết diện được chia thành <strong>hàng ngàn “sợi” nhỏ</strong>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Cột chữ nhật 300×400 mm → Chia thành 300×400 = 120,000 sợi
Cột tròn ∅300 mm → Chia thành ~70,000 sợi (trong vòng tròn)
</code></pre></div></div>

<p>Mỗi sợi có:</p>

<ul>
  <li>Vị trí \((x_i, y_i)\)</li>
  <li>Diện tích \(dA_i\)</li>
  <li>Tính chất vật liệu: Bê tông hoặc Thép</li>
</ul>

<h4 id="bước-2-quét-không-gian-biến-dạng">Bước 2: Quét Không Gian Biến Dạng</h4>

<p>Thực hiện vòng lặp ba chiều:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>for ε₀ from -0.01 to +0.0035:
  for κ_x from -0.01 to +0.01:
    for κ_y from -0.01 to +0.01:
      1. Tính biến dạng tại mỗi sợi: ε(x,y) = ε₀ + κ_x·y - κ_y·x
      2. Tính ứng suất σ = f(ε) theo tiêu chuẩn
      3. Tích phân lực &amp; momen:
         P = ∑ σ·dA
         Mx = ∑ σ·y·dA
         My = ∑ σ·x·dA
      4. Lưu điểm (P, Mx, My) vào danh sách bề mặt
</code></pre></div></div>

<h4 id="bước-3-xây-dựng-bề-mặt-phá-hoại">Bước 3: Xây Dựng Bề Mặt Phá Hoại</h4>

<p>Tập hợp tất cả các điểm \((P, Mx, My)\) từ quét trên tạo thành <strong>bề mặt liên tục trong không gian 3D</strong>.</p>

<p>Ví dụ: Quét lưới \(50 \times 50 \times 50\) sẽ sinh ra <strong>125,000 điểm</strong> → Sau lọc bỏ những điểm trùng → <strong>~20,000 điểm lẻ</strong> tạo nên bề mặt mịn.</p>

<hr />

<h2 id="tác-động--ý-nghĩa">Tác Động &amp; Ý Nghĩa</h2>

<h3 id="độ-chính-xác-cao-hơn">Độ Chính Xác Cao Hơn</h3>

<p><strong>So sánh Bresler vs Strain Compatibility Method</strong> (ví dụ cột 300×400, 8∅20, f’c=30 MPa):</p>

<table>
  <thead>
    <tr>
      <th>Phương Pháp</th>
      <th>Mxx (kNm)</th>
      <th>Myy (kNm)</th>
      <th>Mx=60, My=40 → k</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Bresler</td>
      <td>150</td>
      <td>150</td>
      <td>0.92 → ❌ Không an toàn</td>
    </tr>
    <tr>
      <td>Fiber Integration</td>
      <td>145</td>
      <td>145</td>
      <td>0.98 → ✅ An toàn</td>
    </tr>
  </tbody>
</table>

<p>Fiber Integration cho kết quả <strong>chính xác hơn</strong> vì:</p>

<ul>
  <li>Không xấp xỉ</li>
  <li>Dựa trên cơ học, không thực nghiệm</li>
  <li>Hỗ trợ tất cả tiêu chuẩn</li>
</ul>

<h3 id="linh-hoạt-tiêu-chuẩn">Linh Hoạt Tiêu Chuẩn</h3>

<p>Có thể so sánh cùng cột theo <strong>3 chuẩn</strong> cùng lúc:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Cột 300×400, f_ck=30 MPa, 8∅20:

TCVN: Pu = 2500 kN (100%)
ACI:  Pu = 1950 kN (78%) - Bảo toàn hơn
EC2:  Pu = 1450 kN (58%) - Bảo toàn nhất

Kỹ sư có thể chọn tiêu chuẩn phù hợp với dự án
</code></pre></div></div>

<h3 id="tiết-kiệm-thời-gian-thiết-kế">Tiết Kiệm Thời Gian Thiết Kế</h3>

<p><strong>Thủ công</strong>: 8 giờ/cột (vẽ biểu đồ, tính k, kiểm chứng)<br />
<strong>ShortCol 3D</strong>: 2 phút/cột (nhập → Tính → Kết quả)</p>

<p>→ <strong>Tiết kiệm 95% thời gian</strong>, quy mô dự án 100 cột = <strong>600 giờ nhân công</strong></p>

<hr />

<h2 id="kết-luận-khi-nào-nên-dùng-biểu-đồ-tương-tác-3d">Kết Luận: Khi nào nên dùng biểu đồ tương tác 3D</h2>

<p>Biểu đồ tương tác 3D không phải là <strong>lý thuyết mới</strong> - Nó đã tồn tại từ những năm 1970 trong các bài báo học thuật. Tuy nhiên, việc <strong>triển khai công cụ web công khai</strong>, cho phép kỹ sư thông thường sử dụng mà không cần ANSYS hay ABAQUS, là một <strong>bước tiến lớn</strong>.</p>

<h3 id="những-lợi-ích-chính">Những Lợi Ích Chính</h3>

<p>✅ <strong>Độ chính xác cao</strong>: Tích phân sợi đầy đủ, không xấp xỉ<br />
✅ <strong>Minh bạch</strong>: Hỗ trợ 3 tiêu chuẩn, hiển thị hệ số bảo toàn rõ ràng<br />
✅ <strong>Tiết kiệm thời gian</strong>: Tự động hóa quy trình tính toán phức tạp<br />
✅ <strong>Trực quan</strong>: Bề mặt 3D tương tác giúp hiểu rõ hành vi cột<br />
✅ <strong>Miễn phí, web-based</strong>: Không cần cài đặt, mọi lúc mọi nơi</p>

<h3 id="hướng-phát-triển-tiếp-theo">Hướng Phát Triển Tiếp Theo</h3>

<ol>
  <li><strong>Tích hợp tải trọng động đất</strong> - Thêm phân tích quay phẳng biến dạng</li>
  <li><strong>Hỗ trợ tiết diện phức tạp</strong> - Hình T, hình I, hình L</li>
  <li><strong>Xuất báo cáo tự động</strong> - PDF với chi tiết tính toán</li>
  <li><strong>So sánh dự án</strong> - Lưu &amp; so sánh nhiều cột</li>
  <li><strong>API công cộng</strong> - Cho phép tích hợp vào phần mềm khác</li>
</ol>

<h3 id="lời-kêu-gọi-cho-kỹ-sư">Lời Kêu Gọi Cho Kỹ Sư</h3>

<p>Hãy <strong>dũng cảm thử nghiệm</strong> với các công cụ mới. Fiber Integration 3D không phải là “black box” - nó là <strong>thể hiện trực tiếp của cơ học kết cấu</strong>. Bằng cách hiểu rõ thuật toán, bạn sẽ thiết kế cột <strong>an toàn hơn, thông minh hơn</strong>.</p>

<p><strong>ShortCol 3D chờ bạn</strong>: <a href="https://hydrostructai.com/apps/shortcol3D">shortcol3D</a></p>

<hr />

<p><strong>Tham khảo</strong>:</p>

<ul>
  <li>TCVN 5574:2018 - Tiêu chuẩn thiết kế kết cấu bê tông cốt thép</li>
  <li>EN 1992-1-1:2004 - Eurocode 2: Design of Concrete Structures</li>
  <li>ACI 318-19 - Building Code Requirements for Structural Concrete</li>
  <li>Bresler, B. (1960). “Design of Concrete Columns” - Journal of ACI</li>
  <li>Mander, J. B., Priestley, M. J. N., &amp; Park, R. (1988). “Theoretical Stress-Strain Model for Confined Concrete” - Journal of Structural Engineering</li>
</ul>

<hr />

<p><em>Bài viết này là một phần của dự án ShortCol - Công cụ phân tích biểu đồ tương tác cột bê tông cốt thép theo tiêu chuẩn quốc tế.</em></p>]]></content><author><name>Hydro Structure AI</name></author><category term="Structural Engineering" /><category term="3D Analysis" /><category term="ShortCol 3D" /><category term="Fiber Integration" /><category term="Triaxial Bending" /><category term="TCVN 5574" /><category term="EC2" /><category term="ACI 318" /><category term="P-Mx-My Diagram" /><summary type="html"><![CDATA[Tại Sao Cần Biểu Đồ Tương Tác 3D?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://hydrostructai.github.io/assets/images/app-icons/shortcol3D.png" /><media:content medium="image" url="https://hydrostructai.github.io/assets/images/app-icons/shortcol3D.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Xây dựng Biểu đồ Tương tác Cột (P-M) theo 3 Tiêu chuẩn: TCVN, EC2 và ACI</title><link href="https://hydrostructai.github.io/structural%20engineering/algorithms/shortcol-standard/" rel="alternate" type="text/html" title="Xây dựng Biểu đồ Tương tác Cột (P-M) theo 3 Tiêu chuẩn: TCVN, EC2 và ACI" /><published>2025-12-12T10:00:00+07:00</published><updated>2025-12-12T10:00:00+07:00</updated><id>https://hydrostructai.github.io/structural%20engineering/algorithms/shortcol-standard</id><content type="html" xml:base="https://hydrostructai.github.io/structural%20engineering/algorithms/shortcol-standard/"><![CDATA[<h2 id="bài-toán-cột-chịu-nén-lệch-tâm">Bài toán Cột Chịu Nén Lệch Tâm</h2>

<p>Trong thiết kế kết cấu, <strong>cột chịu nén lệch tâm</strong> là một trong những tình huống phức tạp nhất. Khác với nén đúng tâm (tải trọng dọc tác dụng ở tâm), nén lệch tâm có momen uốn phụ kèm theo, dẫn đến phân bố ứng suất không đều trên tiết diện.</p>

<p>Để kiểm chứng an toàn của cột dưới tác dụng kết hợp nén + uốn, kỹ sư sử dụng <strong>biểu đồ tương tác P-M</strong> (Interaction Diagram). Đây là biểu đồ biểu thị quan hệ giữa:</p>

<ul>
  <li><strong>Trục tung (P)</strong>: Sức chịu nén dọc (kN)</li>
  <li><strong>Trục hoành (M)</strong>: Sức chịu momen uốn (kNm)</li>
</ul>

<p>Biểu đồ giới hạn vùng <strong>an toàn</strong> (dưới đường cong) và vùng <strong>không an toàn</strong> (trên đường cong).</p>

<h3 id="tại-sao-phải-so-sánh-3-tiêu-chuẩn">Tại sao phải so sánh 3 tiêu chuẩn?</h3>

<p>Thế giới hiện nay có nhiều tiêu chuẩn thiết kế khác nhau, mỗi tiêu chuẩn có <strong>cách định nghĩa cường độ và hệ số bảo toàn riêng</strong>:</p>

<table>
  <thead>
    <tr>
      <th>Tiêu chuẩn</th>
      <th>Áp dụng</th>
      <th>Đặc điểm</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>TCVN 5574:2018</strong></td>
      <td>Việt Nam</td>
      <td>Chuẩn quốc gia, đơn giản, cường độ trực tiếp</td>
    </tr>
    <tr>
      <td><strong>EC2:2004/2015</strong></td>
      <td>EU, UK</td>
      <td>Chuẩn châu Âu, hệ số bảo toàn rõ ràng (γ = 1.5/1.15)</td>
    </tr>
    <tr>
      <td><strong>ACI 318-19</strong></td>
      <td>Mỹ, Canada</td>
      <td>Chuẩn Mỹ, hệ số biến đổi theo cường độ, ε_cu thấp</td>
    </tr>
  </tbody>
</table>

<p><strong>Vấn đề thực tế</strong>: Một cột được thiết kế an toàn theo TCVN có thể <strong>không đạt</strong> tiêu chuẩn EC2 vì EC2 bảo toàn hơn. Ngược lại, cột an toàn theo ACI có thể có biên độ an toàn khác so với TCVN.</p>

<p>Công cụ <strong>ShortCol</strong> được phát triển để so sánh tự động các tiêu chuẩn, giúp kỹ sư lựa chọn phương án thiết kế phù hợp nhất.</p>

<hr />

<h2 id="phương-pháp-tính-toán-tương-thích-biến-dạng">Phương Pháp Tính Toán: Tương Thích Biến Dạng</h2>

<h3 id="khái-niệm-cơ-bản">Khái Niệm Cơ Bản</h3>

<p>Phương pháp <strong>Strain Compatibility</strong> (Tương thích biến dạng) dựa trên giả thiết:</p>

\[\text{"Mặt cắt phẳng vẫn giữ nguyên phẳng sau biến dạng"}\]

<p>Điều này có nghĩa là biến dạng ở bất kỳ vị trí nào trên tiết diện tỉ lệ thuận với khoảng cách tới <strong>trục trung hòa</strong> (neutral axis).</p>

<h3 id="quy-trình-5-bước">Quy Trình 5 Bước</h3>

<h4 id="bước-1-xác-định-hình-học-tiết-diện">Bước 1: Xác Định Hình Học Tiết Diện</h4>

<p>Xác định kích thước và vị trí:</p>

<ul>
  <li>Cột chữ nhật: $B$ (chiều rộng), $H$ (chiều cao)</li>
  <li>Cột tròn: $D$ (đường kính)</li>
  <li>Lớp bảo vệ: $d_c$ (cover)</li>
</ul>

<h4 id="bước-2-bố-trí-cốt-thép">Bước 2: Bố Trí Cốt Thép</h4>

<p>Xác định vị trí của từng thanh thép:</p>

<ul>
  <li><strong>Cột chữ nhật</strong>: Thanh thép phân bố dọc theo chu vi tiết diện</li>
  <li><strong>Cột tròn</strong>: Thanh thép phân bố trong đường tròn</li>
</ul>

<p>Công thức bố trí cho cột chữ nhật với $N_b$ thanh:</p>

\[\text{Chu vi lõi} = 2(B + H) - 4 \cdot d_c\]

\[\text{Khoảng cách} = \frac{\text{Chu vi lõi}}{N_b}\]

<h4 id="bước-3-quét-vị-trí-trục-trung-hòa">Bước 3: Quét Vị Trí Trục Trung Hòa</h4>

<p>Thực hiện vòng lặp trên vị trí của trục trung hòa từ $c = -\infty$ đến $c = +\infty$:</p>

\[c \in [-100 \text{ mm}, -50 \text{ mm}, ..., 0, ..., 50 \text{ mm}, 100 \text{ mm}]\]

<p>Mỗi vị trí $c$ sẽ sinh ra <strong>một điểm</strong> trên biểu đồ P-M.</p>

<h4 id="bước-4-tích-phân-lực--momen">Bước 4: Tích Phân Lực &amp; Momen</h4>

<p><strong>Lực Bê Tông</strong> ($F_c$):</p>

<p>Ứng suất bê tông phân bố trên vùng nén với cường độ thiết kế $R_b$ (hay $f_{cd}$ hay $0.85f’_c$):</p>

\[F_c = R_b \times \text{Area}_{nén}\]

\[M_c = F_c \times \text{khoảng cách tới tâm}\]

<p><strong>Lực Cốt Thép</strong> ($F_s$):</p>

<p>Sử dụng <strong>Strain Compatibility</strong> để tính ứng suất mỗi thanh:</p>

\[\varepsilon_s = \varepsilon_{cu} \times \frac{y_{bar} - y_{NA}}{c}\]

<p>Trong đó:</p>

<ul>
  <li>$\varepsilon_{cu}$ = biến dạng cực hạn bê tông (0.0035 cho TCVN/EC2; 0.003 cho ACI)</li>
  <li>$y_{bar}$ = vị trí Y của thanh thép</li>
  <li>$y_{NA}$ = vị trí trục trung hòa</li>
</ul>

<p>Ứng suất thép với cắt ngọn:</p>

\[\sigma_s = \min(|\varepsilon_s \times E_s|, R_s)\]

<p>Lực thép:</p>

\[F_s = \sigma_s \times A_s\]

<h4 id="bước-5-sinh-đường-cong-tương-tác">Bước 5: Sinh Đường Cong Tương Tác</h4>

<p>Tổng hợp lực dọc và momen:</p>

\[P_u = \frac{F_c + \sum F_s}{1000} \text{ [kN]}\]

\[M_u = \frac{M_c + \sum M_s}{1,000,000} \text{ [kNm]}\]

<p>Tập hợp tất cả các cặp $(M_u, P_u)$ từ các vị trí $c$ khác nhau tạo thành <strong>đường cong tương tác</strong>.</p>

<hr />

<h2 id="so-sánh-sâu-3-tiêu-chuẩn">So Sánh Sâu 3 Tiêu Chuẩn</h2>

<h3 id="1-tcvn-55742018-việt-nam">1. TCVN 5574:2018 (Việt Nam)</h3>

<h4 id="định-nghĩa-cường-độ">Định Nghĩa Cường Độ</h4>

<p>TCVN sử dụng <strong>cường độ thiết kế trực tiếp</strong> mà không chia hệ số bảo toàn:</p>

\[R_b = f_{ck} \quad \text{(Không chia hệ số)}\]

\[R_s = f_{yk} \quad \text{(Không chia hệ số)}\]

<p>Ví dụ: $f_{ck} = 25$ MPa $\Rightarrow R_b = 25$ MPa</p>

<h4 id="biến-dạng-cực-hạn">Biến Dạng Cực Hạn</h4>

\[\varepsilon_{cu} = 0.0035 \quad \text{(cố định)}\]

<h4 id="hệ-số-khối-ứng-suất">Hệ Số Khối Ứng Suất</h4>

\[\alpha = 0.8 \quad \Rightarrow \quad a = 0.8 \times c\]

<h4 id="độc-lập-tiêu-chuẩn">Độc Lập Tiêu Chuẩn</h4>

<p>Giá trị $R_b$ và $R_s$ <strong>đã tích hợp</strong> hệ số bảo toàn, nên tiêu chuẩn này độc lập hơn với các tiêu chuẩn khác.</p>

<h3 id="2-ec220042015-châu-âu">2. EC2:2004/2015 (Châu Âu)</h3>

<h4 id="định-nghĩa-cường-độ-1">Định Nghĩa Cường Độ</h4>

<p>EC2 sử dụng <strong>cường độ đặc trưng</strong> chia cho <strong>hệ số bảo toàn riêng</strong>:</p>

\[f_{cd} = 0.85 \times \frac{f_{ck}}{\gamma_c} = 0.85 \times \frac{f_{ck}}{1.5} \approx 0.567 \times f_{ck}\]

\[f_{yd} = \frac{f_{yk}}{\gamma_s} = \frac{f_{yk}}{1.15} \approx 0.87 \times f_{yk}\]

<p>Ví dụ: $f_{ck} = 25$ MPa $\Rightarrow f_{cd} \approx 8.24$ MPa</p>

<p><strong>Hệ số bảo toàn rõ ràng:</strong></p>

<ul>
  <li>$\gamma_c = 1.5$ (bê tông)</li>
  <li>$\gamma_s = 1.15$ (thép)</li>
</ul>

<h4 id="ưu-điểm">Ưu Điểm</h4>

<p>✓ <strong>Minh bạch</strong>: Kỹ sư có thể thấy rõ hệ số bảo toàn<br />
✓ <strong>Kiểm chứng độc lập</strong>: Dễ dàng audit lại tính toán<br />
✓ <strong>Bảo toàn hơn</strong>: Chia 1.5 cho bê tông là rất thận trọng</p>

<h4 id="hệ-lệnh">Hệ Lệnh</h4>

<table>
  <thead>
    <tr>
      <th>Khía Cạnh</th>
      <th>Giá Trị</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>$\varepsilon_{cu}$</td>
      <td>0.0035</td>
    </tr>
    <tr>
      <td>$\alpha$</td>
      <td>0.8</td>
    </tr>
    <tr>
      <td>$\gamma_c$</td>
      <td>1.5</td>
    </tr>
    <tr>
      <td>$\gamma_s$</td>
      <td>1.15</td>
    </tr>
  </tbody>
</table>

<h3 id="3-aci-318-19-mỹcanada">3. ACI 318-19 (Mỹ/Canada)</h3>

<h4 id="định-nghĩa-cường-độ-2">Định Nghĩa Cường Độ</h4>

<p>ACI sử dụng <strong>cường độ danh định</strong> nhân với hệ số độc lập:</p>

\[f_c'' = 0.85 \times f'_c \quad \text{(không chia hệ số)}\]

\[f_y = f_y \quad \text{(sử dụng trực tiếp)}\]

<p>Ví dụ: $f’_c = 28$ MPa $\Rightarrow f_c’’ = 23.8$ MPa</p>

<h4 id="biến-dạng-cực-hạn---điểm-khác-biệt-chính">Biến Dạng Cực Hạn - <strong>Điểm Khác Biệt Chính</strong></h4>

\[\varepsilon_{cu} = 0.003 \quad \text{(NHỎ HƠN EC2 &amp; TCVN!)}\]

<p><strong>Hệ quả quan trọng:</strong></p>

<p>Với biến dạng cực hạn nhỏ hơn, vùng nén bê tông cần phải lớn hơn để đạt được khả năng chịu lực tương tự. Điều này dẫn đến:</p>

<ul>
  <li>Trục trung hòa <strong>cao hơn</strong></li>
  <li>Đòn bẩy kháng lực <strong>nhỏ hơn</strong></li>
  <li>Biểu đồ P-M <strong>nhỏ hơn</strong> (bảo toàn hơn)</li>
</ul>

<h4 id="hệ-số-khối-ứng-suất---biến-đổi">Hệ Số Khối Ứng Suất - <strong>Biến Đổi</strong></h4>

<p>Khác với TCVN/EC2 ($\alpha = 0.8$ cố định), ACI có:</p>

\[\beta_1 = f(f'_c) = \begin{cases}
0.85 &amp; \text{nếu } f'_c \leq 28 \text{ MPa} \\
0.85 - 0.05 \times \frac{f'_c - 28}{7} &amp; \text{nếu } 28 &lt; f'_c \leq 55 \\
0.65 &amp; \text{nếu } f'_c &gt; 55 \text{ MPa}
\end{cases}\]

<p><strong>Ý nghĩa</strong>: Khi cường độ bê tông cao, vùng nén cần nhỏ lại để ngăn chặn sự thất bại spalling (nứt gọn).</p>

<h4 id="hệ-số-an-toàn">Hệ Số An Toàn</h4>

<p>ACI áp dụng hệ số giảm riêng biệt:</p>

\[\phi = 0.75 \quad \text{(cho uốn + nén)}\]

<p>Điều này <strong>không tích hợp</strong> vào $f_c’’$, mà áp dụng sau tính toán.</p>

<h3 id="bảng-so-sánh-tổng-hợp">Bảng So Sánh Tổng Hợp</h3>

<table>
  <thead>
    <tr>
      <th>Tiêu Chuẩn</th>
      <th>Rb / fcd / σc</th>
      <th>εcu</th>
      <th>β / β1</th>
      <th>Đặc Điểm</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>TCVN</strong></td>
      <td>$f_{ck}$ (100%)</td>
      <td>0.0035</td>
      <td>0.8 (cố định)</td>
      <td>Đơn giản, trực tiếp</td>
    </tr>
    <tr>
      <td><strong>EC2</strong></td>
      <td>$0.567 f_{ck}$ (57%)</td>
      <td>0.0035</td>
      <td>0.8 (cố định)</td>
      <td>Bảo toàn rõ ràng, γ=1.5/1.15</td>
    </tr>
    <tr>
      <td><strong>ACI</strong></td>
      <td>$0.85 f’_c$ (85%)</td>
      <td><strong>0.003</strong></td>
      <td>Biến đổi 0.65-0.85</td>
      <td>Bảo toàn hơn (εcu nhỏ)</td>
    </tr>
  </tbody>
</table>

<h3 id="ví-dụ-tính-toán-cụ-thể">Ví Dụ Tính Toán Cụ Thể</h3>

<p><strong>Cho</strong>: Cột $300 \times 400$ mm, $f_{ck} = 25$ MPa, $f_{yk} = 400$ MPa, 6 thanh $\Phi 18$</p>

<p><strong>Giả sử</strong>: Trục trung hòa $c = 100$ mm (nén không quá cao)</p>

<h4 id="tcvn">TCVN</h4>

\[F_c = 25 \text{ MPa} \times 300 \text{ mm} \times 80 \text{ mm} = 600,000 \text{ N} = 600 \text{ kN}\]

\[\varepsilon_s = 0.0035 \times \frac{150 - 100}{100} = 0.00175\]

\[\sigma_s = 0.00175 \times 200,000 = 350 \text{ MPa} &lt; 400 \text{ MPa (không chảy dẻo)}\]

\[F_s = 350 \times 1527 = 534.5 \text{ kN}\]

\[P_u = (600 + 534.5) = 1134.5 \text{ kN}\]

<h4 id="ec2">EC2</h4>

\[F_c = 8.24 \text{ MPa} \times 300 \times 80 = 197,760 \text{ N} \approx 198 \text{ kN}\]

\[\varepsilon_s = 0.0035 \times \frac{50}{100} = 0.00175\]

\[\sigma_s = 350 \text{ MPa} \Rightarrow F_s \approx 534 \text{ kN}\]

\[P_u \approx (198 + 534) = 732 \text{ kN} \quad (\approx 65\% \text{ của TCVN})\]

<h4 id="aci-fc--28-mpa">ACI (f’c ≈ 28 MPa)</h4>

\[F_c = 0.85 \times 28 \times 300 \times 0.85 \times 100 = 642.9 \text{ kN}\]

\[\varepsilon_s = 0.003 \times \frac{50}{100} = 0.0015 \quad \text{(NHỎ HƠN!)}\]

\[\sigma_s = 0.0015 \times 200,000 = 300 \text{ MPa}\]

\[F_s = 300 \times 1527 = 458.1 \text{ kN}\]

\[P_u \approx (643 + 458) = 1101 \text{ kN}\]

<p><strong>Kết Luận</strong>:</p>

<ul>
  <li><strong>TCVN</strong>: 1134.5 kN (100%, baseline)</li>
  <li><strong>ACI</strong>: 1101 kN (97%, gần TCVN)</li>
  <li><strong>EC2</strong>: 732 kN (65%, bảo toàn nhất)</li>
</ul>

<p><strong>EC2 yêu cầu tiết diện lớn hơn</strong> để đạt được cùng khả năng chịu lực vì hệ số bảo toàn 1.5 rất cao.</p>

<hr />

<h2 id="tính-hệ-số-an-toàn-phương-pháp-ray-casting">Tính Hệ Số An Toàn: Phương Pháp Ray Casting</h2>

<h3 id="bài-toán">Bài Toán</h3>

<p>Cho:</p>

<ul>
  <li>Điểm tải trọng thực tế: $(M_{load}, P_{load})$</li>
  <li>Đường cong sức chịu: Tập hợp điểm $(M_{cap}, P_{cap})$</li>
</ul>

<p>Tìm: Hệ số an toàn $k$ sao cho:</p>

\[k = \frac{\text{Khoảng cách từ gốc O đến điểm sức chịu}}{\text{Khoảng cách từ gốc O đến điểm tải trọng}}\]

<h3 id="ray-casting-method">Ray Casting Method</h3>

<p><strong>Bước 1</strong>: Vẽ tia từ gốc O(0,0) qua điểm tải trọng</p>

<p>Tia tham số hóa:</p>

\[(M, P) = t \cdot (M_{load}, P_{load}), \quad t &gt; 0\]

<p><strong>Bước 2</strong>: Tìm giao điểm với đường cong</p>

<p>Mỗi đoạn thẳng trên đường cong:</p>

\[(M, P) = (M_1, P_1) + s \cdot [(M_2, P_2) - (M_1, P_1)], \quad 0 \leq s \leq 1\]

<p><strong>Bước 3</strong>: Giải hệ phương trình</p>

\[t \cdot M_{load} = M_1 + s \cdot (M_2 - M_1)\]

\[t \cdot P_{load} = P_1 + s \cdot (P_2 - P_1)\]

<p><strong>Bước 4</strong>: Tính hệ số</p>

<p>Giá trị $t$ chính là <strong>hệ số an toàn</strong>:</p>

\[k = t = \frac{\text{Sức chịu}}{\text{Tải trọng}}\]

<h3 id="tiêu-chuẩn-an-toàn">Tiêu Chuẩn An Toàn</h3>

\[k \geq 1.0 \quad \Rightarrow \quad \text{An toàn}\]

\[k &lt; 1.0 \quad \Rightarrow \quad \text{Không an toàn}\]

\[k = 1.0 \quad \Rightarrow \quad \text{Giới hạn}\]

<hr />

<h2 id="những-sự-khác-biệt-chính--ảnh-hưởng-thực-tế">Những Sự Khác Biệt Chính &amp; Ảnh Hưởng Thực Tế</h2>

<h3 id="1-biến-dạng-cực-hạn-khác-nhau">1. Biến Dạng Cực Hạn Khác Nhau</h3>

<table>
  <thead>
    <tr>
      <th>Tiêu Chuẩn</th>
      <th>εcu</th>
      <th>Ảnh Hưởng</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>TCVN/EC2</td>
      <td>0.0035</td>
      <td>Vùng nén <strong>lớn hơn</strong> ⟹ Sức chịu <strong>cao hơn</strong></td>
    </tr>
    <tr>
      <td>ACI</td>
      <td>0.003</td>
      <td>Vùng nén <strong>nhỏ hơn</strong> ⟹ Sức chịu <strong>thấp hơn</strong> (bảo toàn)</td>
    </tr>
  </tbody>
</table>

<p><strong>Hệ quả</strong>: Cột có thể an toàn theo TCVN nhưng không an toàn theo ACI.</p>

<h3 id="2-hệ-số-bảo-toàn-tích-hợp-vs-rõ-ràng">2. Hệ Số Bảo Toàn Tích Hợp vs Rõ Ràng</h3>

<table>
  <thead>
    <tr>
      <th>Tiêu Chuẩn</th>
      <th>Phương Pháp</th>
      <th>Ưu Điểm</th>
      <th>Nhược Điểm</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>TCVN</strong></td>
      <td>Tích hợp vào $R_b, R_s$</td>
      <td>Đơn giản</td>
      <td>Khó kiểm chứng độc lập</td>
    </tr>
    <tr>
      <td><strong>EC2</strong></td>
      <td>Rõ ràng ($\gamma_c=1.5, \gamma_s=1.15$)</td>
      <td>Minh bạch</td>
      <td>Phức tạp hơn</td>
    </tr>
    <tr>
      <td><strong>ACI</strong></td>
      <td>Riêng biệt ($\phi = 0.75$)</td>
      <td>Linh hoạt</td>
      <td>Dễ bỏ sót $\phi$</td>
    </tr>
  </tbody>
</table>

<h3 id="3-sự-thích-ứng-với-cường-độ-cao-fc--50-mpa">3. Sự Thích Ứng với Cường Độ Cao (f’c &gt; 50 MPa)</h3>

<ul>
  <li><strong>TCVN</strong>: Không đề cập, $\alpha = 0.8$ vẫn cố định</li>
  <li><strong>EC2</strong>: Có công thức điều chỉnh cho bê tông C90</li>
  <li><strong>ACI</strong>: β1 giảm từ 0.85 xuống 0.65 khi $f’_c &gt; 55$ MPa</li>
</ul>

<p><strong>ACI phù hợp hơn</strong> với các dự án dùng bê tông cường độ cao (như cầu, tòa nhà chọc trời).</p>

<hr />

<h2 id="tại-sao-cần-công-cụ-tự-động-như-shortcol">Tại Sao Cần Công Cụ Tự Động như ShortCol?</h2>

<p>Xét đến những sự phức tạp trên:</p>

<ol>
  <li><strong>3 tiêu chuẩn khác nhau</strong> ⟹ Cần tính 3 lần riêng biệt</li>
  <li><strong>Phương pháp tính phức tạp</strong>: Tương thích biến dạng, tích phân lực, ray casting</li>
  <li><strong>Dễ sai sót</strong> nếu tính bằng tay, đặc biệt ở các bước lặp vòng</li>
  <li><strong>Cần so sánh nhanh</strong> để lựa chọn tiêu chuẩn phù hợp</li>
</ol>

<p><strong>ShortCol</strong> giải quyết vấn đề bằng cách:</p>

<p>✅ Tự động quét trục trung hòa<br />
✅ Tích hợp lực &amp; momen chính xác<br />
✅ Tính hệ số an toàn bằng ray casting<br />
✅ Vẽ biểu đồ so sánh 3 tiêu chuẩn<br />
✅ Xuất kết quả để kiểm chứng</p>

<p>Nhờ vậy, kỹ sư tiết kiệm <strong>hàng giờ tính toán</strong> và <strong>giảm thiểu sai sót</strong>.</p>

<hr />

<h2 id="kết-luận">Kết Luận</h2>

<p>Biểu đồ tương tác P-M là công cụ không thể thiếu trong thiết kế cột chịu nén lệch tâm. Tuy nhiên, mỗi tiêu chuẩn thiết kế (TCVN, EC2, ACI) có cách định nghĩa cường độ, biến dạng, và hệ số bảo toàn khác nhau, dẫn đến kết quả <strong>có thể khác biệt đáng kể</strong>.</p>

<h3 id="những-điểm-chính">Những Điểm Chính:</h3>

<ol>
  <li><strong>TCVN</strong>: Đơn giản, trực tiếp, bảo toàn vừa phải</li>
  <li><strong>EC2</strong>: Bảo toàn rõ ràng (γ=1.5), phù hợp với tiêu chuẩn quốc tế</li>
  <li><strong>ACI</strong>: Bảo toàn nhất (εcu=0.003), phù hợp bê tông cường độ cao</li>
</ol>

<h3 id="lời-khuyên-thực-tế">Lời Khuyên Thực Tế:</h3>

<ul>
  <li>Chọn tiêu chuẩn theo <strong>yêu cầu dự án</strong> và <strong>quy định địa phương</strong></li>
  <li>Khi có sự <strong>lựa chọn</strong>, hãy <strong>so sánh tất cả 3 tiêu chuẩn</strong> để hiểu rõ ảnh hưởng</li>
  <li>Sử dụng <strong>công cụ tự động</strong> để giảm sai sót và tiết kiệm thời gian</li>
  <li><strong>Luôn xác nhận</strong> kết quả bằng cách kiểm tra một vài điểm tay</li>
</ul>

<p>Công cụ <strong>ShortCol</strong> hỗ trợ điều này một cách hoàn hảo, cho phép kỹ sư <strong>so sánh trực tiếp</strong>, <strong>hiểu rõ sự khác biệt</strong>, và <strong>lựa chọn giải pháp tối ưu</strong> cho từng dự án.</p>

<hr />

<p><strong>Tham khảo thêm:</strong></p>

<ul>
  <li>TCVN 5574:2018 - Tiêu chuẩn thiết kế kết cấu bê tông cốt thép</li>
  <li>EN 1992-1-1:2004 - Eurocode 2: Design of Concrete Structures</li>
  <li>ACI 318-19 - Building Code Requirements for Structural Concrete</li>
  <li>ShortCol - Web-based tool for interaction diagram calculation</li>
</ul>

<hr />

<p><em>Bài viết này là một phần của dự án ShortCol - công cụ tính toán biểu đồ tương tác cột theo 3 tiêu chuẩn quốc tế.</em></p>]]></content><author><name>Hydro Structure AI</name></author><category term="Structural Engineering" /><category term="Algorithms" /><category term="ShortCol" /><category term="Interaction Diagram" /><category term="TCVN 5574" /><category term="Eurocode 2" /><category term="ACI 318" /><summary type="html"><![CDATA[Bài toán Cột Chịu Nén Lệch Tâm]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://hydrostructai.github.io/assets/images/app-icons/shortcol2D.png" /><media:content medium="image" url="https://hydrostructai.github.io/assets/images/app-icons/shortcol2D.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>