iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
AI & Data

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

[Day12] 從無到有的曖昧對象演算法(part04)

  • 分享至 

  • xImage
  •  

漫漫長夜 只能寫點程式碼轉移注意力了~

程式碼

bool stop = true; ///是否繼續演算法
            double contentValue = 0.0; // 用來存儲匹配的值
            double fillLevelValue = 0.0; // 用來存儲匹配的值
            double init_ans_low = 10000; // 用來存儲匹配的值
            double lest_ans_low = 10000; // 用來存儲匹配的值
            string BottleContent_low = "";
            string BottleFillLevel_low = "";
            double weight = 0;

            ///當次遍歷的組合
            string BContent = "";
            string BFillLevel = "";

            List<BottleData> countList = new List<BottleData>();
            Dictionary<string, int> init_values = new Dictionary<string, int>();
            Dictionary<string, int> lest_values = new Dictionary<string, int>();

            init_values = new Dictionary<string, int>
                {
                    { "Water", random.Next(1,10000) },
                    { "Ice", random.Next(1,10000) },
                    { "Juice", random.Next(1,10000) },
                    { "Full", random.Next(1,10000) },
                    { "Half", random.Next(1,10000) },
                    { "Empty", random.Next(1,10000) }
                };

            Bottle_keynameans = lightestBottle.GetDescription().Split(',').ToList();
            while (stop)
            {
                // 使用 Dictionary 存儲隨機值與名稱
                if (Bottle_keynameans[0] == BContent)
                {
                    lest_values = new Dictionary<string, int>
                    {
                        { "Water", init_values["Water"] },
                        { "Ice", init_values["Ice"] },
                        { "Juice", init_values["Juice"] },
                        { "Full", random.Next(init_values["Full"] * 75 / 100 > 0 ? init_values["Full"] * 75 / 100 : 0, init_values["Full"] * 125 / 100  < 100000 ? init_values["Full"] * 125 / 100  : 1) },
                        { "Half", random.Next(init_values["Half"] * 75 / 100 > 0 ? init_values["Half"] * 75 / 100 : 0, init_values["Half"] * 125 / 100  < 100000 ? init_values["Half"] * 125 / 100  : 1) },
                        { "Empty", random.Next(init_values["Empty"] * 75 / 100 > 0 ? init_values["Empty"] * 75 / 100 : 0, init_values["Empty"] * 125 / 100  < 100000 ? init_values["Empty"] * 125 / 100  : 1) }
                    };
                }
                else if (Bottle_keynameans[1] == BFillLevel)
                {
                    lest_values = new Dictionary<string, int>
                    {
                        { "Water", random.Next(init_values["Water"] * 75 / 100 > 0 ? init_values["Water"] * 75 / 100 : 0, init_values["Water"] * 125 / 100  < 100000 ? init_values["Water"] * 125 / 100  : 1) },
                        { "Ice", random.Next(init_values["Ice"] * 75 / 100 > 0 ? init_values["Ice"] * 75 / 100 : 0, init_values["Ice"] * 125 / 100  < 100000 ? init_values["Ice"] * 125 / 100  : 1) },
                        { "Juice", random.Next(init_values["Juice"] * 75 / 100 > 0 ? init_values["Juice"] * 75 / 100 : 0, init_values["Juice"] * 125 / 100  < 100000 ? init_values["Juice"] * 125 / 100  : 1) },
                        { "Full", init_values["Full"] },
                        { "Half", init_values["Half"]},
                        { "Empty", init_values["Empty"] }
                    };
                }
                else
                {
                    lest_values = new Dictionary<string, int>
                    {
                        { "Water", random.Next(1,10000) },
                        { "Ice", random.Next(1,10000) },
                        { "Juice", random.Next(1,10000) },
                        { "Full", random.Next(1,10000) },
                        { "Half", random.Next(1,10000) },
                        { "Empty", random.Next(1,10000) }
                    };
                }


                ///將使用者輸入數量的所有瓶子遍歷
                for (int i = 0; i < bottles.Count; i++)
                {
                    Bottle bottle = bottles[i];
                    stringList = bottle.GetDescription().Split(',').ToList();
                    BContent = stringList[0];
                    BFillLevel = stringList[1];
                    weight = bottle.Get_Tatle_Weight();


                    Console.WriteLine($"瓶子 {i + 1}:{bottle.GetDescription()}");

                    // 檢查 BottleContent 是否等於 KeyName,如果是,則存儲對應的值
                    if (lest_values.ContainsKey(BContent))
                    {
                        contentValue = lest_values[BContent];
                    }
                    // 檢查 BottleFillLevel 是否等於 KeyName,如果是,則存儲對應的值
                    if (lest_values.ContainsKey(BFillLevel))
                    {
                        fillLevelValue = lest_values[BFillLevel];
                    }

                    double ans = contentValue * fillLevelValue / 10000000;

                    ///符合市場上的其中幾項指標
                    if (Bottle_keynameans[0] == BContent)
                    {
                        if (lest_ans_low >= ans)
                        {
                            lest_ans_low = ans;
                            BottleContent_low = BContent;
                        }
                    }
                    if (Bottle_keynameans[1] == BFillLevel)
                    {
                        if (lest_ans_low >= ans)
                        {
                            lest_ans_low = ans;
                            BottleFillLevel_low = BFillLevel;
                        }
                    }


                    Console.WriteLine($"對應的值:{ans}");

                    ///終止條件,如果符合市場數據的最佳結果
                    if (Bottle_keynameans[0] == BottleContent_low && Bottle_keynameans[1] == BottleFillLevel_low)
                    {
                        stop = false;
                        Console.WriteLine($"最低的權重結果:{lest_ans_low} \n組合項目:{BottleContent_low} {BottleFillLevel_low}\n" + JsonConvert.SerializeObject(lest_values));
                        break;
                    }
                }
                ///將本次迴圈的值暫存
                init_values = lest_values;
            };
            Console.WriteLine($"最低的權重結果:{lest_ans_low} \n組合項目:{BottleContent_low} {BottleFillLevel_low}\n" + JsonConvert.SerializeObject(lest_values));

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


上一篇
[Day11] 從無到有的曖昧對象演算法(part03)
下一篇
[Day13] 從無到有的曖昧對象演算法(part05)
系列文
如何使用演算法優化ERP系統營運準確率與效能以降低營運成本13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言