注册 登录
编程论坛 VFP论坛

再次请教学生如何分派

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

工作需要均衡分配学生,近日浏览查询发现论坛前期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
69 回复
#52
my23182024-12-12 10:43
回复 49楼 wengjl
如果把高分段和低分段学生都进行蛇形分派,是不是可以进一步提高均衡性?
#53
my23182024-12-12 10:46
现在用amdAPU5600k,3200学生用编译后的程序分派用时不到1秒,效率满高的
#54
wengjl2024-12-12 13:35
以下是引用my2318在2024-12-12 10:43:24的发言:

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


应该是的

S形分派,是建立在人数相等的基础上的

[此贴子已经被作者于2024-12-13 08:43编辑过]

#55
wengjl2024-12-12 13:41
以下是引用chychychy在2024-12-9 10:40:11的发言:

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


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


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


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

就分数段中各段的人数,校间是不可能均衡的。比如最优和最差各70个,各为每班1人,二中有20人,三中只15人。

[此贴子已经被作者于2024-12-13 08:46编辑过]

#57
schtg2024-12-12 18:06
回复 56楼 wengjl
这是一个非常好的思路,谢谢!
#58
my23182024-12-13 00:06
只有本站会员才能查看附件,请 登录

用错位蛇形(高分段和低分段都用)和随机算法,分64个班,结果见图
#59
chychychy2024-12-13 08:22
回复 56楼 wengjl
如果考虑校际均衡的话这是一个很好的思路,不过目前大多数地方学校都不行学校之间招生计划数不均衡是其一,学校分重点和非重点是更重要的原因
#60
my23182024-12-13 10:14
只有本站会员才能查看附件,请 登录

3200学生,分64个班,每班50人,高低分段均错位蛇形分派5轮,其余随机分派,在amd apu5600k上用时2秒,结果见附件。
#61
wengjl2024-12-13 10:34
回复 60楼 my2318
能否把代码发上来共享
#62
schtg2024-12-13 12:15
回复 60楼 my2318
错位蛇形,不完全数S型的,好办法!
#63
my23182024-12-13 20:23
以下是引用my2318在2024-12-11 08:25:59的发言:

个人观点,等级录取最好的办法是建一个由所有科目和所有学校及录取类别的字段组成的自由表,然后穷尽所有科目等级组合及对应的可录取学校及类别的记录(所有的录取规则),然后再用单个学生成绩在这个表里查找,看可以录取到那个学校及那类学生,最后再统计,这样做虽然不是效率最高的办法,但是是最可靠的办法,现在的计算机性能强劲,用时不会长


关于2b2c2d录取规则的事今天考虑一下,建录取规则表的方法不可取,当科目多时表记录太多,效率不理想,不过今天已想到了一个简单的解决方法,明天试一下,看看效率
#64
my23182024-12-14 15:05
只有本站会员才能查看附件,请 登录

编译成exe后,录取时间和分派时间各用时1秒,效率和速度还可以。
运行环境,AMD apu5600k,16G内存,ssd.
#65
my23182024-12-14 15:05
只有本站会员才能查看附件,请 登录
#66
my23182024-12-14 15:09
只有本站会员才能查看附件,请 登录
#67
my23182024-12-14 15:10
只有本站会员才能查看附件,请 登录
#68
xs5912222024-12-14 18:54
回复 67楼 my2318
您让俺看到了鱼,但偶想要渔,发上表单欣赏,谢谢!
#69
chychychy2024-12-15 15:01
回复 66楼 my2318
能否论坛共享,或者QQ私聊,我QQ313693957

[此贴子已经被作者于2024-12-16 08:03编辑过]

#70
nybdx2024-12-17 15:26
感谢!……欣赏……
12