How to encourage and motivate undergraduates to regularly and independently work on problem sets?
A few (by no means exhaustive) suggestions:


Use extended-response or open-answer style questions. What such a question would look like is completely field-specific, but it's definitely doable in every field (yes, even the technical ones). In theory at least, this makes it harder for several students to copy off of another student without commiting actual plagiarism.
Avoid assigning problems directly from a textbook. This requires more effort on your end, but it prevents students from being able to just copy out of a solution manual.
Make the students propose the problems. Similar to my first suggestion -- if the problem is that students are uninterested, give them the chance to do something that is interesting for them. Obviously you need to put bounds on this, but even within the confines of a single problem set this is doable. For example, in a course on Data Structures in CS, you could ask something akin to "write a simple program that uses data structure X and methods A, B, and C." What they do is up to them, but you still test their comprehension.
Use a flipped classroom model. This is probably the most involved suggestion, but if done properly it means the students are working on homework right in front of you. Makes it a lot harder to just copy answers when the instructor is walking around the room.