Matlab 用intlinprog实现目标函数
我有一个Matlab程序,根据一些约束输出一些二进制变量 以三个n=3位为例,{x_1 x_2 x_3,x_4 x_5 x_6,x_7 x_8 x_9}我的程序将根据约束输出所有这些位 在这一点上,我没有目标函数 然而,目标函数的目标是最小化某些n比特对之间的总汉明距离(HD) 假设我想最小化HD(x_1 x_2 x_3 vs x_4 x_5 x_6)+(x_1 x_2 x_3 vs x_7 x_8 x_9) 不用说,n可以随着HD的对数而变化Matlab 用intlinprog实现目标函数,matlab,optimization,mixed-integer-programming,integer-programming,Matlab,Optimization,Mixed Integer Programming,Integer Programming,我有一个Matlab程序,根据一些约束输出一些二进制变量 以三个n=3位为例,{x_1 x_2 x_3,x_4 x_5 x_6,x_7 x_8 x_9}我的程序将根据约束输出所有这些位 在这一点上,我没有目标函数 然而,目标函数的目标是最小化某些n比特对之间的总汉明距离(HD) 假设我想最小化HD(x_1 x_2 x_3 vs x_4 x_5 x_6)+(x_1 x_2 x_3 vs x_7 x_8 x_9) 不用说,n可以随着HD的对数而变化 如何使用intlinprog执行此操作?我觉得没有
如何使用intlinprog执行此操作?我觉得没有帮助。一点方向感就行了。我需要更改我的A、b、Aeq等吗?对于这种类型的目标,可能有更好的实现方式,但我喜欢回到基础上来理解发生了什么。一个简单的方法是考虑汉明距离对于一对二进制变量意味着什么。如果变量具有相同的值(0和0,或1和1),则汉明距离为零;如果变量不具有相同的值,则汉明距离为1 假设有两个二进制变量v1和v2。创建另一个变量Z并添加约束:
Z >= V1 - V2
Z >= V2 - V1
现在Z必须大于或等于V1和V2之间的汉明距离。因此,如果我们最小化Z,我们将最小化汉明距离。对多对变量的概括是显而易见的-为所有变量对(如V1和V2)创建一个类似于Z的变量,然后最小化这些Z变量的总和。谢谢。你认为不增加任何变量就可以做到这一点吗?