anchor.diff:      (return-from proxima-tarefa nil)))
     
    
  -;operador
  +;operador para gerar sucessores
   ;operador assume que as tasks estao ordenadas por ordem crescente
   ;estado interno e' um array de job-task-w-constr
   (defun inicia-task (estado)
     (let* ((sucessores '())
          	 (dimensions (array-dimensions estado))
  -       	 (rows (car dimensions))
  -       	 (columns (cadr dimensions))) ;numero de jobs igual ao numero de linhas
  +       	 (rows (car dimensions)) ;numero de jobs igual ao numero de linhas
  +       	 (columns (cadr dimensions))) 
   
       (loop for job from 0 to (- rows 1) do
         (let* ((prox-task (proxima-tarefa estado job))
  
positive.code: 		 	(columns (cadr dimensions)))
    		(loop for job from 0 to (- rows 1) do
    			(if (loop for task from 0 to (- columns 1) thereis (null (job-shop-task-start.time (job-task-w-constr-job-task (aref estado job task)))))
    					(return-from estado-objectivo nil)
    				)
    			)
    		t
    		)
  	)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ; Struct aux functions
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
negative.code: 		    (setf (aref estado-inicial job task-nr) job-task-wrapper)))))
  
  	 ;inicializacao de precedencias
  	(loop for job from 0 to (- n.jobs 1) do
  	 	(loop for task from 1 to (- (list-length (job-shop-job-tasks (nth job jobs))) 1) do
  		    (let*  ((job-w-constr (aref estado-inicial job task))
  			   		(job-w-constr-before (aref estado-inicial job (- task 1)))
  			   		(job-task-before (job-task-w-constr-job-task job-w-constr-before))
  			   		(virtual-time-before (job-task-w-constr-virtual-time job-w-constr-before))
  			   		(duration-before (job-shop-task-duration job-task-before)))
  	      		(setf (job-task-w-constr-virtual-time job-w-constr) (+ virtual-time-before duration-before)))))
  
  	(cria-problema estado-inicial operadores :objectivo? #'estado-objectivo)))
    
  
  (defun proxima-tarefa (estado job)
  