关于UncapacitatedWL启发式算法的梳理

*算法结构:*定义了四个函数,分别为cost()函数、get_A()函数、heuristicAlgorithm()函数和Report()函数。
求解步骤:
heuristicAlgorithm(F, C)函数开始,F代表建设仓库 i 的成本矩阵、C代表仓库 i 能满足客户 j 需求所需要的成本;
1-读取仓库个数和客户个数
2-把最小成本设为np.inf,即无穷大
3-对应的最小成本分配矩阵Amin初始值None
4-开始迭代100次:决定选取的仓库个数、调用get_A()函数得到A,调用cost()函数得到相应的成本c;如果c<cmin:更新c和Amin,并输出目前的迭代次数和成本
5-返回cmin、Amin

get_A(H, L)函数:H是迭代中选取的仓库序号集合,L是成本矩阵。
1-读取客户数N=50
2-初始化A=[ ]
3-计算各个客户把货物放到已选取的仓库集合中各仓库的成本,选择最小的成本,找到使得客户 i 放货物成本最小的仓库序号,并添加到A。由此得到A。

此时,执行成本函数cost(A,F,L): AA已经由get_A()得到,F已知,L已知。c = 每个客户放在使其费用最小的仓库中的成本 + 修建仓库的固定成本。由此得到cmin.

Report(c, A)函数执行输出任务
1-将A写成数组形式,A= np.array(A)
2-用P表示最佳方案下选择的仓库集合
3-输出最优解c
4-输出各个仓库所服务的顾客序号,在这里,用了pi=np.where(A=i),print(pi[0])

--------函数积累--------
1.set()函数:创建一个无序不重复元素集
在这里插入图片描述

2.numpy中shape的用法:
shape输出的是数组的维数,如果是二维数组,shape[0]为行数,shape[1]为列数,shape输出行数和列数

import numpy as np
b = np.array([[1,2,3,4],
              [1,1,2,2]])
print(b.shape[0],b.shape[1],b.shape)
结果:2 4 (2, 4)

3.np.inf指的是无穷大

4.choice()函数:

  • 以下代码表示从[0, 5)中随机选取3个,replace=False表示3个数不重复,也就是无放回抽取。
import numpy as np
c1 = np.random.choice(a=5, size=3, replace=False, p=None)
print(c1)

结果:[0 3 4]

  • 还可以指定各个随机数出现的概率,如下:指定了0,1,2,3,4的概率,可以看出4的概率为0,因此不可能选到4
import numpy as np
c2 = np.random.choice(a=5, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])
print(c2)

结果:[3 2 0]

5.numpy.where()用法`:where括号里面是条件,返回的是满足该条件时对应数组中的位置索引。

import numpy as np
a = np.array([1, 2, 2, 6, 1, 6, 3, 8, 4])
print(np.where(a > 2))

结果:(array([3, 5, 6, 7, 8], dtype=int64),)

import numpy as np
a = np.array([1, 2, 2, 6, 1, 6, 3, 8, 4])
g = np.where(a > 2)``
print(g[0])

结果:[3 5 6 7 8]

import numpy as np
a = np.array([1, 2, 2, 6, 1, 6, 3, 8, 4])
print(a[np.where(a > 2)])

结果:[6 6 3 8 4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值