Changeset 82
- Timestamp:
- Mar 16, 2005 4:55:18 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/CbcModel.cpp
r78 r82 3610 3610 if (numberIntegers_>numberObjects_) 3611 3611 findIntegers(true); 3612 int newNumberObjects= numberObjects+numberObjects_; 3612 /* But if incoming objects inherit from simple integer we just want 3613 to replace */ 3614 int numberColumns = solver_->getNumCols(); 3615 /** mark is -1 if not integer, >=0 if using existing simple integer and 3616 >=numberColumns if using new integer */ 3617 int * mark = new int[numberColumns]; 3618 int i; 3619 for (i=0;i<numberColumns;i++) 3620 mark[i]=-1; 3621 int newNumberObjects = numberObjects; 3622 int newIntegers=0; 3623 for (i=0;i<numberObjects;i++) { 3624 CbcSimpleInteger * obj = 3625 dynamic_cast <CbcSimpleInteger *>(objects[i]) ; 3626 if (obj) { 3627 int iColumn = obj->columnNumber(); 3628 mark[iColumn]=i+numberColumns; 3629 newIntegers++; 3630 } 3631 } 3632 // and existing 3633 for (i=0;i<numberObjects_;i++) { 3634 CbcSimpleInteger * obj = 3635 dynamic_cast <CbcSimpleInteger *>(object_[i]) ; 3636 if (obj) { 3637 int iColumn = obj->columnNumber(); 3638 if (mark[iColumn]<0) { 3639 newIntegers++; 3640 newNumberObjects++; 3641 mark[iColumn]=i; 3642 } 3643 } 3644 } 3645 delete [] integerVariable_; 3646 integerVariable_=NULL; 3647 if (newIntegers!=numberIntegers_) 3648 printf("changing number of integers from %d to %d\n", 3649 numberIntegers_,newIntegers); 3650 numberIntegers_ = newIntegers; 3651 integerVariable_ = new int [numberIntegers_]; 3613 3652 CbcObject ** temp = new CbcObject * [newNumberObjects]; 3614 int i; 3615 for (i=0;i<numberObjects_;i++) 3616 temp[i]=object_[i]; 3617 for (;i<newNumberObjects;i++) { 3618 temp[i]=objects[i-numberObjects_]->clone(); 3619 temp[i]->setModel(this); 3620 } 3653 // Put integers first 3654 newIntegers=0; 3655 numberIntegers_=0; 3656 for (i=0;i<numberColumns;i++) { 3657 int which = mark[i]; 3658 if (which>=0) { 3659 if (!isInteger(i)) { 3660 newIntegers++; 3661 solver_->setInteger(i); 3662 } 3663 if (which<numberColumns) { 3664 temp[numberIntegers_]=object_[which]; 3665 object_[which]=NULL; 3666 } else { 3667 temp[numberIntegers_]=objects[which-numberColumns]->clone(); 3668 temp[numberIntegers_]->setModel(this); 3669 } 3670 integerVariable_[numberIntegers_++]=i; 3671 } 3672 } 3673 if (newIntegers) 3674 printf("%d variables were declared integer\n",newIntegers); 3675 int n=numberIntegers_; 3676 // Now rest of old 3677 for (i=0;i<numberObjects_;i++) { 3678 if (object_[i]) { 3679 CbcSimpleInteger * obj = 3680 dynamic_cast <CbcSimpleInteger *>(object_[i]) ; 3681 if (obj) { 3682 delete object_[i]; 3683 } else { 3684 temp[n++]=object_[i]; 3685 } 3686 } 3687 } 3688 // and rest of new 3689 for (i=0;i<numberObjects;i++) { 3690 CbcSimpleInteger * obj = 3691 dynamic_cast <CbcSimpleInteger *>(objects[i]) ; 3692 if (!obj) { 3693 temp[n]=objects[i]->clone(); 3694 temp[n++]->setModel(this); 3695 } 3696 } 3697 delete [] mark; 3621 3698 delete [] object_; 3622 3699 object_ = temp; 3700 assert (n==newNumberObjects); 3623 3701 numberObjects_ = newNumberObjects; 3624 3702 }
Note: See TracChangeset
for help on using the changeset viewer.