会微积分的喵

我走得很慢,但我从不后退

一个常见的调度问题是作业车间调度问题,多个作业在多台机器上处理。每个作业由一系列任务组成,这些任务必须按照给定的顺序执行,并且每个任务必须在特定的机器上处理。例如,作业可以是制造单一的消费品,如汽车。问题是如何安排机器上的任务,以最小化调度的长度,即所有任务完成所需的时间。

作业车间问题由几个约束条件:

  • 在作业的前一个任务完成之前,作业的任何任务不能启动
  • 一台机器一次自能做一项任务
  • 一项任务,一旦开始,必须运行到完成

例子

下面是一个作业车间调度问题的简单例子,其中每个作业都用一对数字(m, p)来表示,其中m是必须处理该任务的机器编号,p是该任务的处理时间。(作业和机器的编号从0开始)

  • job 0 = [(0, 3), (1, 2), (2, 2)]
  • job 1 = [(0, 2), (2, 1), (1, 4)]
  • job 2 = [(1, 4), (2, 3)]
阅读全文 »

OR-Tools是用c++编写的,但也可以在Python、Java或C#中使用它。下面主要介绍使用Python创建和运行OR-Tools程序。

以下部分将帮助您开始使用Python的OR-Tools:

  • 什么是优化问题
  • 使用Python解决优化问题
  • 更多使用Python的例子
  • 确定你希望解决的问题类型
阅读全文 »

OR-Tools是用于组合优化的开源软件,寻求从大量可能的解决方案中找到问题的最佳解决方案。下面是一些使用OR-Tools解决的问题例子:

  • 车辆路径规划:在给定的约束条件下(例如,“卡车不能装载超过20000磅”或“所有的递送必须在两个小时内
    完成”),为提取和递送包裹的车队找到最佳路线。
  • 调度问题:在一组固定的机器或其他资源上,为一组复杂的任务找到最佳调度,其中一些任务需要在其他任务之前执行。
  • 装箱问题:将尽可能多的不同尺寸的物品装入数量固定的箱子中,使得每个箱子容量最大。

在大多数情况下,像上述问题有大量可能的解决方案,太多了以至于计算机无法全部搜索它们。为了解决这个问题,OR-Tools使用最先进的算法来缩小搜索集合,以便找到一个最优(或接近最优)的解决方案。

阅读全文 »

0x01 Redis四种模式

这里的模式主要是说的Redis Server的部署模式,有四种:单机模式、主从模式、哨兵模式、集群模式

这四种模式的详细介绍可以参考这篇文章:https://juejin.cn/post/6844904191236767751

主从模式的Redis数据库,单点连接主节点。这种模式主要如果主节点挂掉,从库会切换为主节点,但是主节点IP已经变化,应用服务需要修改IP地址,重新发布。

建议哨兵模式,这种主要连接的是哨兵节点(一个或多个组成),访问redis集群的数据都是通过哨兵集群的,redis集群出现问题,应用服务不用更改访问地址

阅读全文 »

0x01 源于线上Bug

某天下午正在愉快的写着代码,突然某服务客户端报错,看了下报错详细信息,是报的超时错误,客户端设置的连接超时时间是5s,一般不可能报错的,开始查日志,定位问题…

从服务记录的日志来看,是服务里面会请求模型服务,这块耗时超过了5s才返回。整个服务是使用的gunicorn + flask的方式,部署在公司私有云上,请求模型服务使用的是python requests包。

这块代码如下(经过一定的简化):

阅读全文 »

0x01 SVN简介

SVN知道的同学可能比较少,但是大家可能对git都不陌生,相信大家基本都用过全球最大同性交友网站github。

SVN和git是一样的,都是一种版本控制系统,用于多个人共同开发同一个项目,共用资源的目的。

SVN历史比较悠久,在git出来前就有。

0x02 SVN服务器

SVN是CS模式,需要有服务器。SVN服务器支持两种运行方式:独立服务器和借助apache运行,本文主要讲独立服务器的运行方式

本文主要讲在Linux系统Ubuntu 18.04下的安装,其他发行版相差不大。

  1. 安装SVN
    1
    apt-get install subversion
  2. 建立SVN服务器的文件夹
    1
    2
    # svn默认目录
    mkdir /var/svn
阅读全文 »

0x01 简介

这篇论文是一篇关于匹配系统算法的论文(2012年),那会机器学习才刚开始兴起。

主要讲的是《Ghost Recon Online》(中文名称:幽灵行动)游戏研发beta测试的时候,对匹配系统算法做的一些研究,论文中提到的算法并没有在线上使用,主要是离线验证。

Ghost Recon Online

阅读全文 »

OR-Tools CP-SAT 搜索参数

所有参数:

https://github.com/google/or-tools/blob/stable/ortools/sat/sat_parameters.proto

很多参数都要在了解背后的搜索算法后,才知道含义

输出所有参数及其默认值:

1
2
3
4
5
attributes = [attr for attr in dir(solver.parameters) if not attr.startswith('__')]
for attr in attributes:
if attr == "Extensions":
continue
print("{} = {}".format(attr, eval("solver.parameters.{}".format(attr))))

下面是参数类型及一些例子:

Branching and polarity 搜索算法相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum VariableOrder {
IN_ORDER = 0; // As specified by the problem.
IN_REVERSE_ORDER = 1;
IN_RANDOM_ORDER = 2;
}

# 变量顺序
# 这个参数不变,可以在定义变量时,考虑变量顺序
preferred_variable_order = IN_ORDER

enum Polarity {
POLARITY_TRUE = 0;
POLARITY_FALSE = 1;
POLARITY_RANDOM = 2;
POLARITY_REVERSE_WEIGHTED_SIGN = 4;
}

# 初始化相关设置
optional Polarity initial_polarity = POLARITY_FALSE;
阅读全文 »
0%