Path: news.mathworks.com!not-for-mail From: "Siva " <sivaathome@gmail.com> Newsgroups: comp.soft-sys.matlab Subject: Random sampling with constraints Date: Sun, 15 Apr 2012 03:09:17 +0000 (UTC) Organization: Roche Diagnostics Lines: 31 Message-ID: <jmde4t$hd4$1@newscl01ah.mathworks.com> Reply-To: "Siva " <sivaathome@gmail.com> NNTP-Posting-Host: www-03-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: newscl01ah.mathworks.com 1334459357 17828 172.30.248.48 (15 Apr 2012 03:09:17 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Sun, 15 Apr 2012 03:09:17 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 11031 Xref: news.mathworks.com comp.soft-sys.matlab:764505 Hi - I have a random [ 1 x m] vector of unique integers P. I need to randomly generate a [ 1 x n] vector S that is a subset of P that satisfies the requirement that the difference between any two integers in S is greater then "d". For example if I start with a [ 1 x 7] integer vector P= [ 23 2 25 7 15 13 8 16], and "d" is 8, then one possible random [ 1 x 3] integer vector that satisfies my "difference constraint" is [ 23 2 13]. But neither [7 25 2] nor [ 25 23 2] are valid since the "difference constraint" is not satisfied with either one of them. Here is what I do now: % Parent random integer vector P= [ 23 2 25 7 15 13 8 16] ; d= 8 ; % Preliminaries n= 3 ; % desired number of integers in vector S Q= sort( P) ; S= Q( 1) ; % select the first integer nelements= 1 ; % number of integers found so far % Loop until the desired number of integers are identified for i= 2:length(Q) if ( Q(i)-S(end)) > d S= [ S Q( i)] ; nelements= nelements+1 ; if nelements >= n, break, end % break out when the desired number of % elements is found end end This code generates a solution. But I believe the random vector S is 'biased' because of the sort and subsequent selection of the first element in the sorted vector as the first entry of S. I would appreciate any comments and/or suggestions. Thanks. Siva