【问题标题】:LF Framework to solve Data Science IssueLF 框架解决数据科学问题
【发布时间】:2021-09-28 07:57:39
【问题描述】:

我正在寻找能够解决以下数据科学问题的框架:

我有几位老师可以每周工作 X 小时,并且有几个可以教授的科目。

  • 老师 1:数学
  • 教师 2:数学 + 英语
  • 老师3:运动+美术+英语
  • 教师 4:数学 + 艺术
  • 老师5:运动+数学+英语

在一所学校,每个科目每周都需要特定的小时数。比其他人多一些

  • 数学:12 小时
  • 英语:8 小时
  • 美术:4 小时
  • 运动:2 小时

假设一位老师可以做 2-3 个小时,这样你就明白我的意思了^^

我正在寻找的解决方案是一个框架或算法,它用数据填充(训练),然后能够分配教师,以便所有科目都有上限或至少尽可能接近。这意味着也许老师 2 只需要教数学,而老师 5 需要教 50% 的运动和 50% 的英语或 30% 的数学/40% 的运动/30% 的英语。

有人提到Prolog,但我不确定它是否可以处理这种问题?也许我错了?

是否有适合我的问题的东西,或者我注定要自己从头开始编写该算法的代码?

提前致谢。

【问题讨论】:

  • 这听起来不像你必须“训练”任何东西。我认为“训练”与机器学习算法一起使用?神经网络之类的东西?也许您只需要一个约束求解器?使用有限域的约束逻辑编程之类的东西可能就足够了吗?谁提到了 Prolog(根据您的问题),它们到底是什么意思?
  • 这个问题严重低估了。

标签: javascript python prolog data-science data-science-experience


【解决方案1】:

gnu-prolog 中显示此特定示例的约束求解的简单程序:

soln(X) :-
    X = [T1M, T2M, T2E, T3S, T3A, T3E, T4M, T4A, T5S, T5M, T5E],
    fd_domain(X, 0, 10),

    %% subject constraints
    T1M + T2M + T4M + T5M #= 12,
    T2E + T3E + T5E #= 8,
    T4A + T3A #= 4,
    T3S + T5S #= 2,

    %% teacher constraints b/w 2 and 8 hrs
    2 #=< T1M, T1M #=< 8,
    2 #=< T2M + T2E, T2M + T2E #=< 8,
    2 #=< T3S + T3E + T3A, T3S + T3E + T3A #=< 8,
    2 #=< T4M + T4A, T4M + T4A #=< 8,
    2 #=< T5S + T5M + T5E, T5S + T5M + T5E #=< 8,
    fd_labeling(X).

有几个解决方案

| ?- soln(X).

X = [2,0,2,0,0,6,4,4,2,6,0] ? ;

X = [2,0,2,0,1,5,5,3,2,5,1] ? ;

X = [2,0,2,0,1,6,4,3,2,6,0] ? ;

X = [2,0,2,0,1,6,5,3,2,5,0] ? ;

X = [2,0,2,0,2,4,6,2,2,4,2] ? ;

X = [2,0,2,0,2,5,5,2,2,5,1] ? ;

X = [2,0,2,0,2,5,6,2,2,4,1] ? ;

X = [2,0,2,0,2,6,4,2,2,6,0] ? ;

X = [2,0,2,0,2,6,5,2,2,5,0] ? ;

X = [2,0,2,0,2,6,6,2,2,4,0] ? ;

X = [2,0,2,0,3,3,7,1,2,3,3] ? ;

X = [2,0,2,0,3,4,6,1,2,4,2] ? ;

X = [2,0,2,0,3,4,7,1,2,3,2] ? 

每个解决方案 X = ... 分别给出 T1M, T2M, T2E, T3S, T3A, T3E, T4M, T4A, T5S, T5M, T5E 的小时分布。

【讨论】:

  • 哇老兄..这太棒了!我将尝试使用整个数据集。非常感谢
  • 是否可以在约束中设置优先级?就像如果不可能 100% 限制科目,算法应该优先考虑数学,然后是英语,然后是运动等等?
  • @LarsB。是的,你可以这么做。应适当设计此类约束。您可以使用gnu-prolog 中的fd_maximize(Goal, Var) 优化变量。所以你应该稍微放松一下主题约束(使用#&lt;而不是#=),然后使用fd_maximize。如果您是 prolog 新手,我建议您尝试一些约束求解器的示例,看看它们是如何工作的。在大多数情况下,正确建模问题比实际编写程序更难。
  • @LarsB。如果你有时间,我建议你看一下 cmets 中 false 建议的 youtube 视频。您将很好地了解如何使用约束规划。
【解决方案2】:

第一步似乎是将研究问题(或一系列问题陈述)翻译成精确的形式。问题表征/问题概念化似乎是解决该问题的一种技术。一旦方法被概念化,就必须为每个子模型和子模块确定一种技术。

将高级问题陈述分解为较小的问题称为问题概念化。对于每个子问题,必须确定一种技术,并且方法必须由前面所述的假设来确定。

解决方案的实现:确定假设是否合理或解决方案是否满足他的需求。

这可以与他使用这些子问题创建的流程图进行比较,并且通常,它正在尝试达到他将确定问题类别的粒度级别。因此,这些问题可以归类为功能优化或分类问题。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2020-12-08
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2021-06-03
    • 2014-05-12
    相关资源
    最近更新 更多