注册 登录
编程论坛 VFP论坛

再次请教学生如何分派

chychychy 发布于 2024-12-03 16:06, 1162 次点击
只有本站会员才能查看附件,请 登录

工作需要均衡分配学生,近日浏览查询发现论坛前期wengjl曾发过同样的帖子,一是我个人水平有限没完全读懂高手的语句,二是没完全解决问题
这里我借鉴wengjl数据表,修改了一下人数(致谢)
报名库(bmk)中共3200人,按计划库(zkjhk)中字段zsrs人数要求分别录取到一中(招690人)、二中(招850人)、三中(招1000人)、四中(招660人),分派时,只考虑中考成绩的均衡即可(性别及毕业学校等不用考虑)
请教
1.Tiger5392版的程序结果有时人数不完全相同,如何解决,能否注解一下
2.wengjl版用平均分(pjf)来衡量均衡性,请教还有更好的方式吗
Tiger5392版语句如下
程序代码:
CLOSE ALL
USE zkjhk
COPY TO ARRAY laArr FIELDS zsrs
USE bmk.DBF
RAND(SECONDS())
STORE 0 TO lnCnt1,lnCnt2,lnCnt3,lnCnt4
SCAN
    lnRound=RAND()
    DO CASE
    CASE lnRound<=laArr(1)/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt1<laArr(1)
        lcSchool='0100'
        lnCnt1=lnCnt1+1
    CASE lnRound<=(laArr(1)+laArr(2))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt2<laArr(2)
        lcSchool='0200'
        lnCnt2=lnCnt2+1
    CASE lnRound<=(laArr(1)+laArr(2)+laArr(3))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt3<laArr(3)
        lcSchool='0300'
        lnCnt3=lnCnt3+1
    OTHERWISE
        lcSchool='0400'
        lnCnt4=lnCnt4+1
    ENDCASE
    REPLACE lqxxdm WITH lcSchool
ENDSCAN
SELECT lqxxdm,COUNT(*) lqrs,AVG(tot) pjf FROM bmk GROUP BY lqxxdm
57 回复
#52
my2318昨天 10:43
回复 49楼 wengjl
如果把高分段和低分段学生都进行蛇形分派,是不是可以进一步提高均衡性?
#53
my2318昨天 10:46
现在用amdAPU5600k,3200学生用编译后的程序分派用时不到1秒,效率满高的
#54
wengjl昨天 13:35
以下是引用my2318在2024-12-12 10:43:24的发言:

如果把高分段和低分段学生都进行蛇形分派,是不是可以进一步提高均衡性?


S形分派,是建立在人数相等的基础上的
#55
wengjl昨天 13:41
以下是引用chychychy在2024-12-9 10:40:11的发言:

您这这种规则不仅是单纯的12344321,中间还有变化,请教比如9、10、11、12和13、14、15、16变化的逻辑是什么?用vfp如何实现?


VFP实现在49楼
#56
wengjl昨天 13:49
以下是引用chychychy在2024-12-9 16:50:45的发言:


谢谢,数据都差不多,wengjl的数据也比较有代表性,难在用什么方式解决人数不均等、不成倍数关系下的“均衡”


另一个思路是把每个学校的招生数分解为班数,如一中18班、二中20班、三中15班、四中17班,共计70个班,每班48人,就好分了
先把学生分成70个班,每班生源均衡。
再把70个班随机分到学校,就平均数而言,校间是均衡的。

就分数段中各段的人数,校间是不可能均衡的
#57
schtg昨天 18:06
回复 56楼 wengjl
这是一个非常好的思路,谢谢!
#58
my231823 分钟前
只有本站会员才能查看附件,请 登录

用错位蛇形(高分段和低分段都用)和随机算法,分64个班,结果见图
12