📄 solving multidimensionalknapsackproblem.cs
字号:
//順序為:此次合法決策 +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 + -