|
“反导弹系统的布防”
大家是怎么解的呀?
我们只解了第一问
如下 请大家提意见 一齐把他补充完整
反导弹系统布防模型
【摘要】 针对反导弹系统的布防问题,本文在假设的前提下,根据提供的信息用Q值法加局部调整的方法,按照各战区的重要性,作出了一个相对“公平”的导弹分配方案,集中对调整理由作了说明,并给出了算法的c++描述,进一步讨论了爱国者导弹生产的数量问题。本文最后对这一模型进行了评述,对实际有一定的指导作用。
【关键词】 Q值法 目标价值 策略
一、 问题的提出
随着现代化军事战争的出现,军事武器的布防问题愈显重要,一个统筹全局的布防系统,往往会使自己在作战中处于主动,从而赢得战争。本题目就是一个关于反导弹系统布防问题,它要求根据各战区的重要性,分配合理的导弹数量,并计算出在国防经费有限的前提下的导弹生产数量。
二、 问题的假设
一、 战区的重要性因地理位置、设备配置、重要目标的数量以及与其它战区的联系等而不同。
二、 我们认为将爱国者导弹按战区的重要性“公平”分配到各战区中即可达到题目中所说的效益最好。
三、 在某个战区中的爱国者导弹,有能力保护所在战区的各个重要目标
四、 蓝方指挥官很明智,他通常会按红方战区的重要性来选择攻击目标。
五、 对一个相对极不重要的战区,在爱国者导弹数量匮乏的情况下,我们允许不在本战区内配置爱国者导弹。
六、 因国防经费有限,我们认为蓝方的一百枚导弹为其极限值,导弹数量不再增加。
七、 一个爱国者导弹仅能够拦截一枚地对地导弹。
八、 一个地对地导弹的威力范围不超过一个战区。
三、 符号说明
A(i) 红方第i个战区名;
n(i) A(i)战区内的重要目标个数;
p 爱国者导弹的平均击中率;
q 中程地对地导弹的平均命中率;
a A(i)战区的总价值;
b A(i)战区的重要性系数:
;
i=1,2,3……k
四、 问题分析
按照假设,我们设出A(i)战区的重要性系数b,它是这个战区地理位置、与其它战区的联系等无形价值和设备配置、重要目标的数量、重要性等有形价值的综合体现。按照这个系数来合理分配各战区爱国者导弹数量,我们认为能够使得效益达到最优。
传统的按比例分配法往往会出现分配结果中含有小数,它采用取小数部分从大到小分配的方法予以处理,虽然能够体现一定的公平度,但是对于军事布局来说此种分配方法明显“公平度”不够,为了更合理的分配,我们采用Q值法加局部调整的方法进行分配。它根据相对不公平程度的大小多次调整,最终能够达到既合理又简明的分配方案。
用Q值法的过程中,如果在第一次按比例分配时,出现若干战区未分配到爱国者导弹。Q值法将无能为力。我们分情况调整处理如下:
1.当M<k : 蓝方地对地导弹数目少于红方战区数,红方某些战区一定不会受到蓝方导弹轰击。我们按照重要性系数从大到小为战区排序,按照假设,后k-M个战区被蓝方攻击的可能性较小。我们可以不在此设防。
[1] N<M,此时爱国者导弹相对于战区数和蓝方导弹数较少,定会有k-N个战区分配不到爱国者导弹。不给后k-N个战区是理所当然的。如果还有战区没有分配到导弹,说明各战区重要性悬殊,我们应该用多数导弹去保护较为重要的目标而放弃那些不重要的,即这些战区也可以放弃。
[2] N>=M,当去掉后k-M战区后,如果还有战区没有分配到导弹,说明各战区重要性悬殊,有必要放弃这些不重要的。
2. 当 M>=k:
[1] N<k,此时爱国者导弹相对于战区数较少,定会有k-N个战区分配不到爱国者导弹。去掉后k-N个是理所当然的。如果还有战区没有分配到导弹,说明各战区重要性悬殊,我们需要用多数导弹去保护较为重要的目标而放弃那些不重要的,虽然蓝方导弹数目很多。
[2] N>=k,如果有战区没有分配到导弹,说明各战区重要性很悬殊,这些战区相对来说极不重要,我们值得放弃。
通过以上分情况讨论,我们认为,当用Q值法在做第一次按比例分配时,如果出现若干战区未分配到爱国者导弹,我们可以将这些战区放弃,即不给其分配导弹,在以下的计算中只对剩下的战区再次分配导弹。
五、模型建立与求解
1. 第一问的求解
由问题分析我们采用以下具体步骤予以求解:
Step 1 设m=[N*b] 即按重要系数得出分配到各个战区的爱国者导弹的数量N*b后取整得出;
Step 2 若 ,说明爱国者导弹已经被合理的分配到各战区,模型建立完毕。否则,转入step 3继续执行;
Step 3 去掉m中为0的项得出新一组m[j]。以后不再考虑给n=0的战区分配导弹;
Step 4 计算Q[j]=a[j]2/[m[j]*[m[j]+1]]
得出: Q[m]=max{Q[1],Q[2],……Q(j)},根据Q值法,显然爱国者导弹应该分配给Q(j)较大的战区Q[m];
Step 5 n[m]=n[m]+1。转至Step 2。
上述算法的C++实现为:
int sum1=0;
int sum=0;
for(int i=1;i<=k;i++)
sum1+=a;
for(int i=1;i<=k;i++)
{
m=N*a/sum1;
sum=sum+m;
}
for(i=N-sum;i>=1;i--)
{
for(int j=1;j<=k;j++)
if(m[j]!=0)
Q[j]=a2/[m*[m+1]];
else Q[j]=0;
int h,max=Q;
for(j=1;j<=k;j++)
if(max<Q)
{
max=Q;
h=i;
}
m[h]=m[h]+1;
}
2.第二问的求解
|
|