Matlab interface now uses true binary data type for binary problems

This commit is contained in:
Marcel Kronfeld
2011-01-21 08:32:31 +00:00
parent e8c14b0aa8
commit a207014610
5 changed files with 70 additions and 21 deletions

View File

@@ -2,13 +2,24 @@ function [ z ] = convertUnsignedJE( int, x )
%CONVERTUNSIGNEDJE Convert signed 32-bit integer to unsigned.
% Detailed explanation goes here
z=zeros(size(x,1),size(x,2), 'uint32');
for j=1 : size(x,1)
for i=1 : size(x,2)
if (x(j,i) < 0)
z(j,i) = 1+bitxor(uint32(-x(j,i)), int.hexMask);
if strcmp(class(x),'java.util.BitSet')
z=num2str(10^(int.dim-1));
for i=1:int.dim
if (x.get(i-1)) % Java indices start at zero!
z(i)='1';
else
z(j,i) = x(j,i);
z(i)='0';
end
end
else
z=zeros(size(x,1),size(x,2), 'int32');
for j=1 : size(x,1)
for i=1 : size(x,2)
if (x(j,i) < 0)
z(j,i) = 1+bitxor(uint32(-x(j,i)), int.hexMask);
else
z(j,i) = x(j,i);
end
end
end
end

View File

@@ -78,7 +78,7 @@ try
% disp(sprintf('running mediator id %d',cnt));
int.mediator.run(cnt);
% disp(sprintf('after running mediator id %d',cnt));
cnt=cnt+1;
cnt=cnt+1;
if (~int.mediator.isFinished())
% disp('getting question');
x = int.mediator.getQuestion();

View File

@@ -6,11 +6,13 @@ if (isempty(int.range))
% binary problem
s=sprintf('Binary problem of bitwidth %d', int.dim);
disp(s);
numInts=ceil(int.dim/wordwidth);
%numInts=ceil(int.dim/wordwidth);
% generate trial vector
x=ceil(rand(1,numInts).*(2^wordwidth));
overheadBits=numInts*wordwidth-int.dim;
x(numInts)=bitshift(x(numInts),-overheadBits); % shift right by overhead
%x=ceil(rand(1,numInts).*(2^wordwidth));
%overheadBits=numInts*wordwidth-int.dim;
%x(numInts)=bitshift(x(numInts),-overheadBits); % shift right by overhead
bs=eva2.tools.math.RNG.randomBitSet(0.5, int.dim);
x=convertUnsignedJE(int, bs);
else
% double problem
x=rand(1, int.dim);
@@ -35,9 +37,10 @@ try
res = feval(int.f, x, int.args);
end
catch ME
disp('Function evaluation failed:');
disp('JEInterface: Test function evaluation failed:');
disp(ME.message);
error(['Test failed! ' ME.message]);
rethrow(ME);
%error(['Test failed! ' ME.message]);
end
disp('Function returned: ');