# Inventory Model

## ปัญหาที่พบจากการทำงาน

ผมเป็นบริษัทรถเช่าที่มีรถ1พันคันและมี10สาขาทั่วประเทศ ชอบเจอปัญหาที่ลูกค้าเช่ารถจากสาขานึงไปคืนอีกสาขานึงทำให้รถบางสาขาไม่พอขายและบางสาขาก็มีรถล้นจนปล่อยเช่าไม่หมด ซึ่งจะมารู้ตอนที่มีบุคกิ้งเข้ามาแล้วไม่มีรถให้ลูกค้าและตอนทำรายงานว่ารถปล่อยเช่าคุ้มไหม&#x20;

### โมเดลการแก้ปัญหาจาก AI

{% tabs %}
{% tab title="รายละเอียด" %}
**Dynamic Fleet Rebalancing Model (DFRM)**

## โมเดลนี้ทำอะไร

คาดการณ์ล่วงหน้า:

> "สาขาไหนจะรถขาด"\
> "สาขาไหนจะรถเกิน"

แล้วสั่งย้ายรถก่อนปัญหาเกิด

แทนที่จะรอ booking เข้าแล้วค่อยร้อง “ชิบหายละ รถหมด”

## สูตรหลัก

<figure><img src="/files/y922bcCQtqoKll6ApMQ6" alt=""><figcaption></figcaption></figure>

โดย

* Current\_i = รถปัจจุบันสาขา i
* Return\_i = รถที่จะถูกคืนเข้าสาขา i
* Booking\_i = booking ที่จะรับรถจากสาขา i
* Safety\_i = รถสำรองขั้นต่ำ

***

### การตัดสินใจ

ถ้า

Net\_i < 0

\= สาขาขาดรถ → ต้องรับรถโอนเข้า

ถ้า

Net\_i > threshold

\= สาขารถเกิน → ส่งรถออกไปช่วยสาขาอื่น
{% endtab %}

{% tab title="KPI" %}

## KPI ที่วัดผล

* Lost sales ลดลง
* Fleet utilization เพิ่มขึ้น
* Idle vehicle ลดลง
* Relocation cost ต่ำลง
  {% endtab %}
  {% endtabs %}

#### โจทย์จำลอง (Scenario)

{% tabs %}
{% tab title="สถานการณ์จำรอง" %}
บริษัท **TIM'S Rent A Car** มีรถทั้งหมด **1,000 คัน** กระจายอยู่ใน **10 สาขาทั่วประเทศไทย** โดยลูกค้าสามารถเช่ารถจากสาขาหนึ่งและคืนอีกสาขาหนึ่งได้ ทำให้เกิดปัญหารถกระจุกตัวไม่สมดุลในแต่ละสาขา ตัวอย่างเช่น สาขาBangkok มีความต้องการจองรถล่วงหน้าเพิ่มขึ้นในช่วงวันหยุด แต่มีรถคงเหลือไม่เพียงพอ ขณะที่สาขาPhuket มีรถจอดว่างจำนวนมากและปล่อยเช่าไม่หมด ฝ่ายบริหารต้องการใช้ **Dynamic Fleet Rebalancing Model (DFRM)** เพื่อวิเคราะห์ว่าควรย้ายรถระหว่างสาขาจำนวนเท่าใด เพื่อลดการเสียโอกาสขายและเพิ่มประสิทธิภาพการใช้รถให้สูงสุด.
{% endtab %}

{% tab title="ตัวอย่าง" %}
**บริษัทมี 1,000 คัน**

**10 สาขา**

***

#### สาขา A (กรุงเทพ)

รถปัจจุบัน = 120

มี booking ใหม่ = 80

มีรถคืนเข้า = 20

Safety stock = 30

<figure><img src="/files/OdYaQKkmWZeZuzvKPM0P" alt=""><figcaption></figcaption></figure>

เหลือ 30 คัน → ปกติ

***

#### สาขา B (เชียงใหม่)

รถปัจจุบัน = 60

Booking = 90

รถคืนเข้า = 10

Safety = 20

<figure><img src="/files/ZL6cPo1rRvG9q0v93rrA" alt=""><figcaption></figcaption></figure>

ขาด 40 คัน

***

#### สาขา C (ภูเก็ต)

รถปัจจุบัน = 150

Booking = 40

รถคืนเข้า = 30

Safety = 20

<figure><img src="/files/s9KZnty3UfBPWFRPJ24j" alt=""><figcaption></figcaption></figure>

รถเกิน 120 คัน

***

## Solution จากโมเดล

ย้ายรถจากภูเก็ต → เชียงใหม่ จำนวน 40 คัน

ก่อน peak demand จะมา
{% endtab %}
{% endtabs %}

#### Web App (HTML) ในการคำนวณจาก AI

```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Fleet Rebalancing Model</title>
<style>
* { box-sizing: border-box; font-family: Arial, sans-serif; }
body {
    margin:0;
    background: linear-gradient(135deg,#0f172a,#1e3a8a);
    color:white;
    min-height:100vh;
    padding:20px;
}
.container {
    max-width:1200px;
    margin:auto;
    background:rgba(255,255,255,0.1);
    backdrop-filter: blur(12px);
    padding:30px;
    border-radius:20px;
}
h1,p{text-align:center;}
.grid {
    display:grid;
    grid-template-columns: repeat(2,1fr);
    gap:20px;
}
.card {
    background:rgba(255,255,255,0.15);
    padding:20px;
    border-radius:15px;
}
label {
    display:block;
    margin-top:8px;
}
input {
    width:100%;
    padding:8px;
    border:none;
    border-radius:8px;
    margin-top:5px;
}
button {
    width:100%;
    padding:14px;
    margin-top:20px;
    background:#22c55e;
    border:none;
    color:white;
    border-radius:10px;
    font-size:16px;
    cursor:pointer;
}
.result {
    margin-top:20px;
    background:rgba(255,255,255,0.15);
    padding:20px;
    border-radius:15px;
}
</style>
</head>
<body>

<div class="container">
    <h1>Dynamic Fleet Rebalancing Model</h1>
    <p>Manage all 10 branches and auto-suggest vehicle transfers.</p>

    <div class="grid" id="branchContainer"></div>

    <button onclick="calculateAll()">Calculate Rebalancing</button>

    <div class="result" id="result">Results will appear here</div>
</div>

<script>
const branches = [
    "Bangkok",
    "Samut Prakan",
    "Chiang Mai",
    "Chiang Rai",
    "Phuket",
    "Chonburi",
    "Chumphon",
    "Korat",
    "Khon Kaen",
    "Trat"
];

const container = document.getElementById("branchContainer");

branches.forEach((branch,index)=>{
    container.innerHTML += `
        <div class="card">
            <h3>${branch}</h3>
            <label>Current Cars</label>
            <input type="number" id="current${index}" value="0">

            <label>Expected Returns</label>
            <input type="number" id="returns${index}" value="0">

            <label>Bookings</label>
            <input type="number" id="bookings${index}" value="0">

            <label>Safety Stock</label>
            <input type="number" id="safety${index}" value="0">
        </div>
    `;
});

function calculateAll(){
    let excess = [];
    let shortage = [];
    let output = "<h2>Branch Status</h2><ul>";

    branches.forEach((branch,index)=>{
        let current = parseInt(document.getElementById(`current${index}`).value)||0;
        let returns = parseInt(document.getElementById(`returns${index}`).value)||0;
        let bookings = parseInt(document.getElementById(`bookings${index}`).value)||0;
        let safety = parseInt(document.getElementById(`safety${index}`).value)||0;

        let net = current + returns - bookings - safety;

        output += `<li>${branch}: Net Balance = ${net}</li>`;

        if(net > 0){
            excess.push({branch, amount: net});
        }
        if(net < 0){
            shortage.push({branch, amount: Math.abs(net)});
        }
    });

    output += "</ul><h2>Auto Transfer Suggestions</h2><ul>";

    shortage.forEach(shortBranch=>{
        let needed = shortBranch.amount;

        for(let i=0;i<excess.length && needed>0;i++){
            let exBranch = excess[i];

            if(exBranch.amount > 0){
                let transfer = Math.min(needed, exBranch.amount);

                output += `<li>Move ${transfer} cars from <b>${exBranch.branch}</b> ➜ <b>${shortBranch.branch}</b></li>`;

                exBranch.amount -= transfer;
                needed -= transfer;
            }
        }

        if(needed > 0){
            output += `<li>⚠️ ${shortBranch.branch} still needs ${needed} more cars.</li>`;
        }
    });

    output += "</ul>";

    document.getElementById("result").innerHTML = output;
}
</script>

</body>
</html>
```

{% file src="/files/WPOSLvMAk3YmsAcoRnD1" %}

#### ประโยชน์ของระบบ Dynamic Fleet Rebalancing Model (DFRM)

1. **ลดการเสียโอกาสขาย (Lost Sales Reduction)**\
   ระบบช่วยคาดการณ์ล่วงหน้าว่าสาขาไหนกำลังจะมีรถไม่พอ ทำให้สามารถย้ายรถไปเติมก่อนลูกค้าจองเข้ามาแล้วไม่มีรถให้เช่า
2. **ลดจำนวนรถจอดว่าง (Reduce Idle Vehicles)**\
   สาขาที่มีรถล้นและปล่อยเช่าไม่หมด สามารถส่งรถไปยังสาขาที่มี demand สูงกว่า ทำให้รถถูกใช้งานอย่างคุ้มค่ามากขึ้น
3. **เพิ่มอัตราการใช้ประโยชน์ของรถ (Higher Fleet Utilization)**\
   รถทั้ง 1,000 คันจะถูกกระจายอย่างเหมาะสมในทั้ง 10 สาขา แทนที่จะกระจุกอยู่บางพื้นที่
4. **ช่วยวางแผนการย้ายรถระหว่างสาขาอัตโนมัติ**\
   ระบบสามารถแนะนำได้ทันทีว่าควรย้ายรถจากสาขาไหน ไปสาขาไหน และจำนวนกี่คัน ลดเวลาการตัดสินใจของผู้จัดการ
5. **รองรับพฤติกรรม One-way Rental**\
   แก้ปัญหาลูกค้าเช่ารถจากสาขาหนึ่งและคืนอีกสาขาหนึ่ง ซึ่งเป็น pain point จริงของธุรกิจรถเช่า
6. **ลดต้นทุนการซื้อรถเกินจำเป็น**\
   แทนที่จะซื้อรถเพิ่มเมื่อบางสาขาขาดรถ ระบบจะเช็คก่อนว่ามีรถส่วนเกินจากสาขาอื่นหรือไม่
7. **ช่วยวางแผนช่วงเทศกาลหรือ High Season ได้ดีขึ้น**\
   เช่น ช่วงปีใหม่ที่ Chiang Mai demand พุ่ง หรือช่วงท่องเที่ยวที่ Phuket มีการเช่าสูง ระบบช่วยเตรียมรถล่วงหน้าได้
8. **เพิ่มความแม่นยำในการตัดสินใจของผู้บริหาร**\
   จากเดิมใช้ประสบการณ์หรือดูรายงานย้อนหลัง กลายเป็นใช้ข้อมูล real-time ช่วยตัดสินใจ
9. **ปรับใช้กับธุรกิจอื่นได้**\
   นอกจากรถเช่า ยังสามารถประยุกต์กับ:
   * รถบรรทุก
   * รถขนส่ง
   * bike sharing
   * EV rental fleet
10. **เพิ่มความพึงพอใจของลูกค้า**\
    ลูกค้าจะมีโอกาสได้รถตรงตามที่ต้องการมากขึ้น ลดปัญหาการถูกปฏิเสธ booking

สรุป\
**รถไม่จม, ลูกค้าไม่หลุด, กำไรไม่หาย**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nattapong.gitbook.io/technology/inventory-model.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
