请问在使用GA做整数规划时,如何使得初始化的值均匀分布?When using GA for integer programming, how to make the initialized values evenly distributed?
如题,我在使用GA做整数规划时,调用GA(func=my_fuc, n_dim=100, size_pop=50, max_iter=1000, lb=[0]*100, ub=[3]*100, precision=[1]*100) ,发现初始化的值大多集中在边界处(也就是3),看了一下源码,应该是因为GA.py源码里 X = np.where(X > self.ub, self.ub, X), 请问这样设置是否必要?或者能否使得超过边界值以后分布得更均匀一些,比如使用求余之类得操作?还有,其他方法能否适用整数规划?感谢!
你的这个案例,理论上和实测都是均匀的。因为有4种整数情况 满足 2**n
之前有一个版本是均匀的,但是实测几个case,发现效果不如现有的(也可能测的不够多或者恰好受其它因素影响),git:https://github.com/guofei9987/scikit-opt/commit/17167094f326608b988df7bcd81c4f9d750d90ea#diff-18339d898cb8486a7d66742d217a666cb704e0773d25e6f0a2f56851a25dbe82
pso/sa 的整数规划问题,之前复现了找到的几篇文章,发现都是在特定问题上效果好。感觉改进空间比较大,就还没整合。
感谢回复,抱歉上面的参数贴错,ub是8的时候会分布不均,应该是扩充到2^n,然后被截断导致的。我试了一下GA做有约束的整数规划,但是效果不理想,惩罚函数的系数也不好调(实际上我将约束条件加入到my_fuc,并没有用constraint_ueq),陷入局部最优就很难出来。PSO/DE的话,我使用的是实数域优化,然后求fitness的时候round一下获得整数解,请问大佬这样做是不是有问题?感觉优化起来很困难,想请教大佬就是做有约束的非线性整数规划哪种群体智能优化算法比较好,因为尝试过专业的求解器但是规模大一点需要跑很久。Merry Chrismas~
感谢回复,抱歉上面的参数贴错,ub是8的时候会分布不均,应该是扩充到2^n,然后被截断导致的。我试了一下GA做有约束的整数规划,但是效果不理想,惩罚函数的系数也不好调(实际上我将约束条件加入到my_fuc,并没有用constraint_ueq),陷入局部最优就很难出来。PSO/DE的话,我使用的是实数域优化,然后求fitness的时候round一下获得整数解,请问大佬这样做是不是有问题?感觉优化起来很困难,想请教大佬就是做有约束的非线性整数规划哪种群体智能优化算法比较好,因为尝试过专业的求解器但是规模大一点需要跑很久。Merry Chrismas~
之前舍弃余数的问题在于,如果真实最优解在边界上,那么算法很难达到边界,所以改成了目前的模式。
看来这么改也不是个最佳解决方案,我思考一下。
PSO/DE时fitness做round,这个思路值得一试,我有空也想一想。