问题描述
我有一个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与x_4 x_5 x_6)+(x_1 x_2 x_3与x_7 x_8 x_9)
毋庸置疑,与HD相比,n可以变化。
如何使用intlinprog执行此操作?我发现this没有帮助。一点方向就可以了。我需要更改我的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变量的总和。