|
现在一个班级有40名学生n01--n40,考试设置10门课程 x01--x10,每科课程有不同的权重w01--w10(取值范围是(0,1)开区间),得出每个学生的加权平均成绩y1~y40, 然后给他们排名。 问题是:要想让张三、李四、王五的排名尽量靠前,权重应当怎么设置? 程序代码如下:
- #首先假设有10科成绩
- x01<-rnorm(n = 40,mean = 80,sd = 10)
- x02<-rnorm(n = 40,mean = 80,sd = 10)
- x03<-rnorm(n = 40,mean = 80,sd = 10)
- x04<-rnorm(n = 40,mean = 80,sd = 10)
- x05<-rnorm(n = 40,mean = 80,sd = 10)
- x06<-rnorm(n = 40,mean = 80,sd = 10)
- x07<-rnorm(n = 40,mean = 80,sd = 10)
- x08<-rnorm(n = 40,mean = 80,sd = 10)
- x09<-rnorm(n = 40,mean = 80,sd = 10)
- x10<-rnorm(n = 40,mean = 80,sd = 10)
- da01<-data.frame(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)
- #每科成绩有一个权重(权重处于(0,1),且10科权重之和等于1)
- w01<-0.1
- w02<-0.1
- w03<-0.1
- w04<-0.1
- w05<-0.1
- w06<-0.1
- w07<-0.1
- w08<-0.1
- w09<-0.1
- w10<-0.1
- attach(da01)
- #计算加权平均分
- da01$y<-0+
- x01*w01+
- x02*w02+
- x03*w03+
- x04*w04+
- x05*w05+
- x06*w06+
- x07*w07+
- x08*w08+
- x09*w09+
- x10*w10
- detach(da01)
- #求每一位同学的排名
- da01$rk<-rank(x = -da01$y,na.last = TRUE)
- View(da01)
- #问题来了,如果想让张三、李四、王五的排名尽量靠前,那么各科成绩的权重w01~w10 应该怎么设置?
- # 实际上就是求 min(y[1]+(y[2]+(y[3]) 的问题。
复制代码
|