iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
AI & Data

如何使用演算法優化ERP系統營運準確率與效能以降低營運成本系列 第 8

[Day08] 到底要用甚麼演算法去優化ERP系統

  • 分享至 

  • xImage
  •  

接前幾天我們已經將資料大致上分類完成

接下來我們會由資料分析跟回歸出發的 支撐向量機(Support Vector Machines, SVM) 的非線性分類著手

對於那些不能被線性分隔的資料集,將資料從原始的特徵空間映射到一個更高維度的特徵空間中,使得在這個高維空間中可以找到一個超平面來分隔資料。

超平面投影示意圖
[SVM 超平面投影示意圖]

參考網址 : https://sark12500.blogspot.com/2019/03/ml-svm.html

也就是當我們資料進行分群篩選之後,需要藉由演算去推測獲取的資料是否符合預期

接下來我們暖暖手,寫點程式碼
舉例來說,現在不知道有幾個寶特瓶(600cc),裡面裝的東西有可能是水(重量1.5)、冰(重量1)、果汁(重量2.25),可能裝滿(600cc)、一半(300cc)或沒裝(0cc)

請問最輕的瓶子是誰,狀態是甚麼?
(如果替換成銷售成本,就可以是成本最低獲利潤最高的!)

主成程式

Console.WriteLine("請輸入瓶子的數量:");
            int bottleCount = int.Parse(Console.ReadLine());

            List<Bottle> bottles = GenerateRandomBottles(bottleCount);

            double minWeight = double.MaxValue;
            Bottle lightestBottle = null;

            foreach (Bottle bottle in bottles)
            {
                double weight = bottle.GetWeight();
                if (weight < minWeight)
                {
                    minWeight = weight;
                    lightestBottle = bottle;
                }
            }

            Console.WriteLine($"隨機生成了 {bottleCount} 個瓶子:");

            foreach (var bottle in bottles)
            {
                Console.WriteLine($"{bottle.GetDescription()},重量為:{bottle.GetWeight()} 克");
            }

            Console.WriteLine($"最輕的瓶子是:{lightestBottle.GetDescription()}, 重量為:{minWeight} 克。");
            Console.ReadKey();

隨機生成瓶子本身的內容

static List<Bottle> GenerateRandomBottles(int count)
        {
            List<Bottle> bottles = new List<Bottle>();
            Random random = new Random();

            for (int i = 0; i < count; i++)
            {
                // 隨機生成瓶子的內容和裝填情況
                BottleContent content = (BottleContent)random.Next(0, 3);
                BottleFillLevel fillLevel = (BottleFillLevel)random.Next(0, 3);

                bottles.Add(new Bottle(content, fillLevel));
            }

            return bottles;
        }

瓶子狀態權重

class Bottle
        {
            private BottleContent content;
            private BottleFillLevel fillLevel;

            private Dictionary<BottleContent, double> contentWeights = new Dictionary<BottleContent, double>()
            {
                { BottleContent.Water, 1.5 },
                { BottleContent.Ice, 1 },
                { BottleContent.Juice, 2.25 }
            };

            private Dictionary<BottleFillLevel, double> fillLevels = new Dictionary<BottleFillLevel, double>()
            {
                { BottleFillLevel.Full, 600 },
                { BottleFillLevel.Half, 300 },
                { BottleFillLevel.Empty, 0 }
            };

            public Bottle(BottleContent content, BottleFillLevel fillLevel)
            {
                this.content = content;
                this.fillLevel = fillLevel;
            }

            public double GetWeight()
            {
                return contentWeights[content] * fillLevels[fillLevel];
            }

            public string GetDescription()
            {
                return $"{content},{fillLevel}";
            }
        }

瓶子狀態列舉

enum BottleContent { Water, Ice, Juice }
enum BottleFillLevel { Full, Half, Empty }

希望能夠堅持完成連續30天的挑戰,也希望如果有錯也請各位高手不吝嗇指教!!


上一篇
[Day06] ERP系統 - 系統參數對於演算法入門理解與發想(part3)
下一篇
[Day09] 從無到有的曖昧對象演算法(part01)
系列文
如何使用演算法優化ERP系統營運準確率與效能以降低營運成本13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言