Matlab 用intlinprog实现目标函数

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执行此操作?我觉得没有

我有一个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执行此操作?我觉得没有帮助。一点方向感就行了。我需要更改我的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变量的总和。

谢谢。你认为不增加任何变量就可以做到这一点吗?