⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 solving multidimensionalknapsackproblem.cs

📁 Solve multi soures Kinapping problem
💻 CS
📖 第 1 页 / 共 2 页
字号:
                        //順序為:此次合法決策 +0-->先加
                        //                    +1-->後加

                        for (int Ry = 1; Ry <= ResourceCount; Ry++)
                        {
                            Y_resourceused[LegalIndex, Ry] = Rs_USD[2 * i, Ry];
                            
                            Y_resourceused[LegalIndex + 1, Ry] = Rs_USD[((i + 1) * 2 - 1), Ry];
                            
                        }
                        
                        for (int p = 1; p <= period; p++)
                        {
                            StrategyINT[i, period] = 0;
                            Policy[LegalIndex, p] = StrategyINT[i, p];
                            

                            StrategyINT[i, period] = 1;
                            Policy[LegalIndex + 1, p] = StrategyINT[i, p];
                        }
                        Optimalvalue[LegalIndex] = Reward[2 * i];
                        Optimalvalue[LegalIndex + 1] = Reward[((i + 1) * 2 - 1)];
                        LegalIndex += 2;
                    }
                    else
                    {
                        for (int Ry = 1; Ry <= ResourceCount; Ry++)
                        {
                            Y_resourceused[LegalIndex, Ry] = Rs_USD[2 * i, Ry];
                        }
                        
                        for (int p = 1; p <= period; p++)
                        {
                            StrategyINT[i, period] = 0;
                            Policy[LegalIndex, p] = StrategyINT[i, p];
                                                  
                        }

                        Optimalvalue[LegalIndex] = Reward[2 * i];
                        LegalIndex++;
                  
                    }
                }
                        legal = legalTemp;
                        legalTemp = 0;
               
            }
            int ShowOptimalvlue = Optimalvalue.Max();
            int OptimalIndex = 0;
            List<int> GetOptimalIndexList = new List<int>();
            for (int i = 0; i < Optimalvalue.Count(); i++)
            {
                GetOptimalIndexList.Add(Optimalvalue[i]);
            }
            double sumWeight=0;
            double tightness = 0;
            for (int i = 0; i < TaskCount; i++)
            {
                sumWeight += Weight[i, 1];
            }
            tightness =ResourceBound[0] / sumWeight;
                OptimalIndex = GetOptimalIndexList.LastIndexOf(ShowOptimalvlue);
          

           OptimalBox.Text = "";
           OptimalBox.Text =" OptimalBox Policy for one solution \n";
           OptimalBox.Text = "Tightness:  " + tightness.ToString() + "\n";
            string CheckorNnot;
            for(int i=0;i<TaskCount;i++)
            {
                if (Policy[OptimalIndex,i+1] == 1)
                    CheckorNnot = " V";
                else
                    CheckorNnot = "  ";

                    OptimalBox.Text =OptimalBox.Text+"Task" + (i + 1).ToString() + "  Value:" + Weight[i, 0].ToString() + "  " + CheckorNnot + "\n";
            }
           
           OptimalBox.Text = OptimalBox.Text + "Optimal Value : " + ShowOptimalvlue.ToString();

           
                #region V1 ERROR~ 啦
                /*
       
            for (int period = 1; period <= TaskCount; period++)
            {
                for(int Ry=1;Ry<=ResourceCount;Ry++)
                {
                    tempR[Ry] = Y_resourceused[Ry];
                    if ((period) != 1)
                        Y_resourceused[Ry] = Y_resourceused[Ry] + Weight[period-1, Ry];
                    else
                       Y_resourceused[Ry] = Weight[period-1, Ry];
                    
                    if(Y_resourceused[Ry] <= ResourceBound[Ry - 1])
                    {
                      RS_OK++;
                    }
                }

                if (RS_OK == ResourceCount)//表示可以選擇是否要加入
                {
                    PeriodPolicy[period] = true;

                    if (Weight[period - 1, 0] + optimalvalue[1, period - 1] > optimalvalue[0, period - 1] || Weight[period - 1, 0] + optimalvalue[0, period - 1] > optimalvalue[1, period - 1])
                    {
                        for (int Ry = 1; Ry <= ResourceCount; Ry++)
                        {
                            Y_resourceused[Ry]= tempR[Ry] + Weight[period - 1, Ry];

                        }
                        optimalvalue[1, period] = Math.Max(Weight[period - 1, 0] + optimalvalue[0, period - 1], Weight[period - 1, 0] + optimalvalue[1, period - 1]);
                    }
                    else
                    {
                        for (int Ry = 1; Ry <= ResourceCount; Ry++)
                        {
                            Y_resourceused[Ry] = tempR[Ry];
                        }
                        optimalvalue[0, period] = Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                    }
                }
                else
                {
                    PeriodPolicy[period] = false;

                    for (int Ry = 1; Ry <= ResourceCount; Ry++)
                    {
                        Y_resourceused[Ry] = tempR[Ry];
                    }
                  optimalvalue[0, period] =Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                  optimalvalue[1, period] =Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                
                } 
                RS_OK = 0;
               
                if (PeriodPolicy[period] == true)
                {
                    optimalvalue[0, period] = Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                    optimalvalue[1, period] = Math.Max(Weight[period - 1, 0] + optimalvalue[0, period - 1], Weight[period - 1, 0] + optimalvalue[1, period - 1]);
                }
                else
                { 
                  optimalvalue[0, period] =Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                  optimalvalue[1, period] =Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                }
                
            
            }
            */
        
     
            #endregion
                #region E2
            /*
            int[,] Y_resourceused = new int[ResourceCount + 1,2];
            int[,] tempR = new int[ResourceCount + 1,2];
            int []RS_OK =new int[2];

            //string []state =new string[];
            List<string> state = new List<string>();
            int[,,] PolicyInt = new int[TaskCount+1, TaskCount+1,4];
            for (int period = 1; period <= TaskCount; period++)
            {
                for (int Ry = 1; Ry <= ResourceCount; Ry++)
                {
                   

                    
                }

                if (PeriodPolicy[period] == true)
                {
                    optimalvalue[0, period] = Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                    optimalvalue[1, period] = Math.Max(Weight[period - 1, 0] + optimalvalue[0, period - 1], Weight[period - 1, 0] + optimalvalue[1, period - 1]);
                }
                else
                {
                    optimalvalue[0, period] = Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                    optimalvalue[1, period] = Math.Max(optimalvalue[0, period - 1], optimalvalue[1, period - 1]);
                }

            }
             
            MessageBox.Show(Math.Max(optimalvalue[1,TaskCount],optimalvalue[0,TaskCount]).ToString());
        }
          */
            #endregion 

        }
      
        private void DPstart_Click(object sender, EventArgs e)
        { 
            

        }

        private void Clear_Click(object sender, EventArgs e)
        {
            
            //openFileDialog1.Dispose();
            //openFileDialog1_FileOk(null, null);
            //openFileDialog1.Reset();
            
            //DPRichBox.Text = "";
            InitializeComponent();

            
        }
  
    }

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -